2

多くの顧客のうち、たった 1 台の PC で発生している非常に奇妙な問題があります。私はそれをメソッドまで追跡しましたMath.Round

この真新しいwin7 PCMath.Round(1.59999,2)が復活1.59!そうあるべきで1.6あり、他のすべての場合にあります。

私はバンカーの丸めに関する の癖を理解してMath.Roundおり、オーバーロードのさまざまな midpointrounding オプションについても認識していますが、いずれにせよ、1.59999常に1.6.

PC の .NET Framework (3.5 sp1) を修復し、完全なウイルス スキャンを実行してみました。この動作の原因と、問題をさらに調査するにはどうすればよいでしょうか。

4

2 に答える 2

1

あなたの中心的な問題は、あなたdoubleが意味のある10進数を期待していることです。10 進数に意味がある場合、

また、丸め時に主な違いが導入されていないことも疑われます。常に に非常に近い値が得られますが、同一ではありません1.61.6で正確に表すことはできませんdouble。特に同じプロセス内の他の dll が浮動小数点フラグを変更した場合は、異なる PC でわずかに異なる値しか得られない可能性があります。

観測された違いは、文字列への変換で発生すると思われます。

于 2012-07-18T10:08:36.680 に答える
1

私が最初に見ることは、数字1.59999がどこから来ているかです。

に送信する前にフロートに解析されている文字列の結果Math.Roundですか? もしそうなら、その文字列が切り捨てられている可能性がありますか? Math.Roundに渡された値が実際1.59999に であり、 ではないことを確信できます1.59か?

于 2012-07-18T09:25:12.460 に答える