Rounding a float to two decimal places, say, does not necessarily create a number with two decimal places. For example
round(10.001, digits = 2)
produces 10.0
How can I force a specific number of shown decimal places?
Rounding a float to two decimal places, say, does not necessarily create a number with two decimal places. For example
round(10.001, digits = 2)
produces 10.0
How can I force a specific number of shown decimal places?
What is displayed and what it is rounded to is not the same thing, similar to your example we also have
julia> round(10.1, sigdigits=2)
10.0
where it is correctly rounded to two significant digits, but since the following decimals are zero it is still displayed in standard float format with a single decimal zero to signify that it is a float with an integer value (I guess that is the reason at least).
So if you want to change the way that is shown as a result I guess you have to override the show
method for floats.
If you just want to print it in a specific way you could have a look at @printf
, see e.g.
Just adding that @printf
is in the Printf
module from standard library, so using Printf
is needed. Also @sprintf
is useful to get a string with formatted output.
Format.jl and Formatting.jl are alternatives to Printf with a more modern formatting language.
Put very simply, it’s because
julia> 10.00
10.0
Check this post for a Matlab-like solution.
**julia>** round(0.79598037, sigdigits=2)
0.8
**julia>** round(0.79598037, sigdigits=3)
0.796
The correct 2-sigdigit answer is “0.80”
I think you’re just confused by how it displays. The round
function tries to round it to the closest Float64
value to the one requested, but then has no control over how it is displayed — it is printed in the shortest possible decimal representation, like any other Float64
value.
Moreover, since this is still a binary floating-point value (= integer times power of two), it isn’t possible for it to be an exact decimal value anyway. e.g. the Float64
value 0.8
is actually 0.8000000000000000444089209850062616169452667236328125
, which is the closest 53-bit integer × 2ᵏ value to 0.8
. (This is just how computer arithmetic works; it’s not specific to Julia.)
If you just want to print something to two significant digits, use @printf
or @sprintf
from the Printf
standard library:
julia> @printf("%0.2f", 0.79598037) # two digits after the decimal point
0.80
julia> @printf("%0.1e", 0.79598037) # two significant digits in scientific notation
8.0e-01
Of course!
The keyword sigdigit
of round, referring to decimal digits confused me.
In this context, the OP was asking for a “specific number of /shown/ decimal places”. As said above, this is a problem of displaying strings for the likes of printf
, not round
for rounding the numeric type.
Though not in Base
, Printf
is a standard library.