Ruby中的Sprintf

时间:2009-10-02 21:59:42

标签: ruby rounding printf

快速问题的排序。我在写:

puts "%.3f %.4f %.5f" % [3.998877, 3.998877, 3.998877]

并获得以下输出:

3.999 3.9989 3.99888

sprintf 只是对数字进行舍入。如何限制舍入?

4 个答案:

答案 0 :(得分:7)

>> 3.998877.to_s[/^\d+\.\d{3}/].to_f
=> 3.998
>> 3.998877.to_s[/^\d+\.\d{4}/].to_f
=> 3.9988

答案 1 :(得分:2)

>> def truncN f, digits
>>    t = 10.0 ** digits
>>    "%.#{digits}f" % ((f * t).truncate / t)
>> end
=> nil
>> n
=> 1.11181111
>> "%.3f" % n
=> "1.112"
>> truncN n, 3
=> "1.111"

答案 2 :(得分:1)

您可能需要将数字截断为您想要的精确度。

f = 3.1919183
puts (f * 1000).truncate() / 1000

答案 3 :(得分:-2)

要按原样获取数字,您应该将它们存储为字符串。只要您将它们表示为浮点数,就会丢失有关内置精度的信息。