给定值x和整数n(在运行时分配),我想将x打印到小数点后的正好n位数(如果需要,在舍入后)。
print(round(x, n))
适用于(x,n)=(3.141592, 3)
,但对于(x,n)=(2.5,5)
,它仅打印2.5
,而不是2.50000
(小数点后5位)。
如果我在运行时知道n,说5,我可以做
@printf("%.5f", x)
但是@printf是一个宏需要在编译时知道。
使用某些show
魔法还是别的东西可以吗?
答案 0 :(得分:4)
使用全新的Format.jl包:
using Format
function foo(x, n)
f = FormatSpec(".$(n)f")
pyfmt(f, x)
end
foo(2.5, 5)
答案 1 :(得分:3)
不幸的是,由于某种原因,@ printf / @sprintf的julia版本不支持" width"根据c printf标准的子说明符(参见man 3 printf
)。
如果你感到勇敢,你可以依靠支持"动态宽度的c sprintf"修饰符,用于收集您只需正常打印的字符串。
A = Vector{UInt8}(100); # initialise array of 100 "chars"
ccall( :sprintf, Int32, (Ptr{UInt8}, Cstring, Int64, Float64), A, "%.*f", 4, 0.1 )
print( unsafe_string(pointer(A)) ) #> 0.1000
请注意%.*f
中的星号,以及用作动态宽度修饰符的额外输入4
。