pry(main)> time = Time.now
=> 2012-01-20 00:10:44 +0000
pry(main)> (time + 4.days).to_f
=> 1327363844.9709609
pry(main)> time.to_f
=> 1327018244.970961
2 に答える
3
これは、浮動小数点の丸めの問題です。数値は、精度が 53 ビットの倍精度浮動小数点数として格納されます。2^53 はおおよそ 9*10^15 であり、表現する正確な数に応じて、15 から 16 桁の 10 進数が得られます。
これら 2 つの数値の 10 進数はそれぞれ 16 桁と 15 桁です。あなたは最後の場所でのみオフです。実際には、格納された正確な値は、これら 2 つの 10 進数ではなく、分数 2 進数で正確に表現されたものです。
于 2012-01-20T00:22:21.840 に答える
2
私がやったとき、それは私には向いていませんでした:
a = Time.now.to_f
=> 1327018729.22437
b = (a + 4.days).to_f
=> 1327364329.22437
これは浮動小数点数に共通する小さなラウンドの問題であり、小さな精度エラーが見つかりました。
これは 1 秒よりもはるかに短い、つまり 1 日で 0.0000001 です。1 日が 86,400 秒しかないことを考えると、これは多くの場合問題にはなりませんが、日付を日付として保存し、Ruby の日付計算を行う十分な理由があります。
于 2012-01-20T00:24:11.567 に答える