Сортировка быстрого вопроса. Я пишу:Sprintf in Ruby
puts "%.3f %.4f %.5f" % [3.998877, 3.998877, 3.998877]
и получить следующий вывод:
3.999 3.9989 3.99888
Sprintf просто округляет число. Как ограничить это округление?
Сортировка быстрого вопроса. Я пишу:Sprintf in Ruby
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
вам, вероятно, потребуется усечь числа с точностью, которую вы хотите.
f = 3.1919183
puts (f * 1000).truncate()/1000
Чтобы получить цифры «как есть», вы должны хранить их как строки. Как только вы представляете их как поплавки, вы теряете информацию о количестве встроенной точности.
Почему бы не сохранить их в качестве рациональных чисел? –
зависит от того, что вы хотите сделать с ними позже, я думаю. – Peter
>> 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