在Ruby中设置浮点的显示精度

b5lpy0ml  于 2023-03-01  发布在  Ruby
关注(0)|答案(5)|浏览(129)

可以在Ruby中设置浮点数的显示精度吗?
比如:

z = 1/3
z.to_s    #=> 0.33333333333333
z.to_s(3) #=> 0.333
z.to_s(5) #=> 0.33333

还是必须重写Floatto_s方法?

dwthyt8l

dwthyt8l1#

z.round(2)x.round(3)是最简单的解决方案。请参见http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round。
也就是说,这只能确保它不超过那么多位数,在1/3的情况下,这是好的,但如果你说0.25.round(3),你会得到0.25,而不是0.250。

gmxoilav

gmxoilav2#

您可以使用sprintf

sprintf("%0.02f", 123.4564564)
jq6vz3qz

jq6vz3qz3#

我通常只使用开放代码进行转换,类似于:

puts "%5.2f" % [1.0/3.0]

Ruby为这样的表达式调用Kernel#format,因为String有一个核心运算符%定义在它上面。如果你觉得有什么印象的话,可以把它当作Ruby* 的 *printf。

3okqufwl

3okqufwl4#

Rubocop建议使用#format而不是#sprintf,并使用带注解的字符串标记。
#format的语法为

%[flags][width][.precision]type

示例:

# Ensure we store z as a float by making one of the numbers a float.
z = 1/3.0

# Format the float to a precision of three.
format('%<num>0.3f', num: z)
# => "0.333"

format('%<num>0.5f', num: z)
# => "0.33333"

# Add some text to the formatted string
format('I have $%<num>0.2f in my bank account.', num: z)
# => "I have $0.33 in my bank account."

参考文献:

5jvtdoz2

5jvtdoz25#

你可以用看跌期权

z = #{'%.3f' % z}

相关问题