我需要根据小数部分后面的位数来验证一个数字。
我成功使用以下代码但是,我想知道:
注意:我知道正则表达式,但我正在寻找数学方法。
var max = 2; // max number of digits after decimal places
var value = 10.154;
var s = value.toString().split('.')
if (s[1].length > max) {
alert('invalid');
} else {
alert('ok');
}

答案 0 :(得分:1)
我相信这是最好的方式,因为没有内置的Javascript函数可以实现你想要的。这个解决方案可以在除欧洲大陆之外的任何地方使用,它们使用逗号(,)分隔符作为小数而不是句点(。)
您也可以这样做,但它不适用于负数
var value = 10.154;
value = Math.abs(value);
var decimal = value - Math.floor(value)
var length = decimal.toString().length;
答案 1 :(得分:0)
您可以使用Python的round()
函数:
>>> num = 10.542
>>> round(num, 2) == num
False
>>> num = 12.32
>>> round(num, 2) == num
True
或
>>> num = 12.32
>>> round(num, 2) >= num
True
>>> num = 12.3
>>> round(num, 2) >= num
True
>>> num = 12.324
>>> round(num, 2) >= num
False
答案 2 :(得分:-1)
确定位数时,需要将数字作为字符串处理。因此,您需要做一些与您正在做的事情类似的事情。或者只是使用.toFixed()
来消除额外的数字。
答案 3 :(得分:-1)
在计算机中,该数字具有整数浮点十进制数。所以10.154实际上是10.15400000000(语言的准确度达到了什么水平)。
所以,如果你想检查它是否有>你去的最大十进制值: 你将整个值乘以10 ^ x然后将模数1乘以它。如果它不是0,那么你有比你设置的最大值更多的deceimal值。
所以根据你的例子10.154(3个小数点)* 10 ^ 2(你的最大值)= 1015.4 1015.4%1 = 0.4所以“无效”