我需要增加任何数字,不管小数位数。唯一的自定义函数是decimalPlaces()
,如下所示:
function decimalPlaces(num) {
var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
if (!match) { return 0; }
return Math.max( 0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0) );
}
那么,那么,例如(在Node中):
a = 2.11
> 2.11
places = decimalPlaces(a)
> 2
additive = Math.pow(10,places*-1);
> 0.01
a + additive
> 2.11999999999999997
适用于90%的案例,但不适用于此案例。我知道有一种方法可以使用指数来进出这个问题(将数字乘以10 ^位并加1),但我只是好奇 - 这个奇怪的浮点问题出现在哪里?要成为一些非常简单的数学?