質問

これに関するアイデアはありますか?

実行時:

printf("%。0f&quot ;, 40.5)

Windowsボックスでは、リターンは「41」です。しかし、本番用のubuntuサーバーでは、" 40"

を取得しています
役に立ちましたか?

解決

バイナリ浮動小数点の不正確さの単純な例のように見えます。 1台のマシンでは、40に丸められる40.499999999を取得します。他のマシンでは40.500000000001になり、41に丸められます。

正確な数値が必要な場合は、バイナリ浮動小数点を使用しないでください。固定小数点、または10進浮動小数点を使用できます。

編集:BigDecimalを使用していると言います。 #round を使用してから #to_i を使用して、フロートへの変換を回避しないのはなぜですか? (または、 #round の代わりに #floor または #ceil ...目標が明確ではありません。)

b = BigDecimal.new("40.5")
print b.round.to_i  # => 41

他のヒント

代わりに .round を使用してはどうですか? Railsはそれをさらに強化し、精度を指定できるようにします( APIを参照doc )。

代わりに%.0gを使用します

ScottJの答えはあなたの問題を説明しません-40.5は正確にバイナリで表現できます。おそらく何が起こっているのでしょうか:Windowsのprintf" rounds half up、quot; Ubuntuのprintf" round half half。"

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top