快速問題的分類。我正在寫:Ruby中的Sprintf
puts "%.3f %.4f %.5f" % [3.998877, 3.998877, 3.998877]
,並得到下面的輸出:
3.999 3.9989 3.99888
的sprintf簡單地舍入的數字。我如何限制舍入?
快速問題的分類。我正在寫:Ruby中的Sprintf
puts "%.3f %.4f %.5f" % [3.998877, 3.998877, 3.998877]
,並得到下面的輸出:
3.999 3.9989 3.99888
的sprintf簡單地舍入的數字。我如何限制舍入?
>> 3.998877.to_s[/^\d+\.\d{3}/].to_f
=> 3.998
>> 3.998877.to_s[/^\d+\.\d{4}/].to_f
=> 3.9988
要獲取數字「原樣」,您應該將它們存儲爲字符串。只要你將它們表示爲浮點數,就會失去有關內置精度數量的信息。
爲什麼不把它們存儲爲有理數呢? – 2009-10-03 03:53:14
取決於你以後想要做什麼,我想。 – Peter 2009-10-03 03:55:04
>> 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"
不錯的解決方案 – gmile 2009-10-04 13:38:29