私は7桁まで数値を丸めるしようとしていますが、私は恐らくMath.roundは、いくつかの数字で正常に動作しないことに気づいた:C#Math.Roundバグ?
Math.Round(39.248779999999996,3) => 39.249
Math.Round(39.248779999999996,4) => 39.2488
Math.Round(39.248779999999996,5) => 39.248779999999996
Math.Round(39.248779999999996,6) => 39.248779999999996
Math.Round(39.248779999999996,7) => 39.248779999999996
誰も私にこの動作を説明できますか?
これらは浮動小数点値であり、 。彼らは、任意の桁数を持つ有限バイナリ表現を持っていません。正確な表現が必要な場合は、 'decimal'型に変換してください。 –
問題は、メソッドのシグネチャを変更できないために外部コンポーネントにdoubleを渡す必要があり、その番号に小数点以下7桁がある場合、そのコンポーネントはエラーをスローします。その倍数を小数点第7位まで効果的に丸める方法はありますか? – smeegoan
ええと、倍精度浮動小数点型は丸められた値を格納する方法がないため、とにかく動作しませんでした。外部コンポーネントはバグです。ダブルスは小数点以下の桁数が固定されていません。 decimal型を使用しているはずです。 –