エッジケースのシナリオと思われるものがあります。値4.015
を小数点以下 2 桁に四捨五入しようとする4.01
と、期待される代わりに常に4.02
. .015
これは、小数部分を含むすべての数値で一貫して発生します。
JS でかなり一般的な方法を使用して丸めます。
val = Math.round(val * 100) / 100;
問題は 100 を掛けたときに始まると思います。浮動小数点の不正確さにより、この値は切り上げではなく切り捨てられます。
var a = 4.015, // 4.015
mult = a * 100, // 401.49999999999994 (the issue)
round = Math.round(mult), // 401
result = round / 100; // 4.01 (expected 4.02)
フィドル: http://jsfiddle.net/eVXRL/
を丸めようとすると、この問題は発生しません4.025
。の期待値4.03
は戻ります。.015
それは(これまでのところ)の問題だけです。
これをエレガントに解決する方法はありますか?もちろん、そのケースを1回限り探して.015
処理するというハックがありますが、それは間違っているようです!