Ruby 中的 Sprintf

发布于 2024-08-06 17:47:34 字数 221 浏览 4 评论 0原文

这是一个快速的问题。我正在写:

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

并得到以下输出:

3.999 3.9989 3.99888

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

Sort of a quick question. I'm writing:

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

and get the following output:

3.999 3.9989 3.99888

sprintf simply rounds the numbers. How do I restrict that rounding?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浊酒尽余欢 2024-08-13 17:47:34
>> 3.998877.to_s[/^\d+\.\d{3}/].to_f
=> 3.998
>> 3.998877.to_s[/^\d+\.\d{4}/].to_f
=> 3.9988
>> 3.998877.to_s[/^\d+\.\d{3}/].to_f
=> 3.998
>> 3.998877.to_s[/^\d+\.\d{4}/].to_f
=> 3.9988
梦行七里 2024-08-13 17:47:34
>> 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"
>> 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"
苍景流年 2024-08-13 17:47:34

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

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

you will probably need to truncate the numbers to the accuracy that you want.

f = 3.1919183
puts (f * 1000).truncate() / 1000
百变从容 2024-08-13 17:47:34

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

To get the numbers 'as is', you should store them as strings. As soon as you represent them as floats you lose information about the amount of built-in precision.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文