ruby - sprintf 格式不符合预期

标签 ruby printf

我在使用 sprintf 时遇到了舍入问题。我通过了 '%0.0f' 作为格式。 sprintf 舍入不符合预期:0.5 应舍入为 1,而不是舍入为 0,这是违反一般舍入规则,而 1.52.5 等已正确舍入:

sprintf('%0.0f', 0.5)
=> "0"


sprintf('%0.0f', 1.5)
=> "2"

为什么会这样,我怎样才能实现预期的行为?

最佳答案

sprintf 执行银行家舍入,将 0.5 舍入到最接近的偶数。这种方法经常被统计学家使用,因为它不会像半数舍入那样人为地夸大平均值。

Float#round 方法(在 Ruby 2.4+ 中)接受一个参数,该参数可以是以下之一:

  • half: :up(默认)
  • 一半::down
  • half: :even(银行四舍五入)

显然您期望 round 的默认值,因此您可以在打印前对您的号码执行 .round

关于ruby - sprintf 格式不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48708224/

相关文章:

ruby-on-rails - Rails:NameError:未初始化常量 Rails::Application::YAML

ruby-on-rails - Rails 4 turbolinks 与谷歌分析

c - 为什么两个整数相除返回 0.00?

c - 使用格式说明符打印数字或字符的多个实例

c - 我的程序没有 printf 就无法运行

ruby - 如何从字符串中删除 HTML 编码的字符?

ruby-on-rails - postgres 的 Ruby on Rails 身份验证错误

java - 我正在尝试在 ant 文件中使用 SASS,同时删除 ruby​​ 依赖项

c++ - 为什么 PRIu64 在此代码中不起作用?

ios - Kotlin - 按下按钮时运行打印语句