用javascript切掉未使用的小数
我有一个货币输入,只需要返回有效数字。输入总是有两位小数,因此:用javascript切掉未使用的小数,javascript,decimal,Javascript,Decimal,我有一个货币输入,只需要返回有效数字。输入总是有两位小数,因此: 4.00 -> 4 4.10 -> 4.1 4.01 -> 4.01 以下是我目前的做法: // chop off unnecessary decimals if (val.charAt(val.length-1) == '0') { // xx.00 val = val.substr(0, val.length-1); } if (val.charAt(val.length-1) == '
4.00 -> 4
4.10 -> 4.1
4.01 -> 4.01
以下是我目前的做法:
// chop off unnecessary decimals
if (val.charAt(val.length-1) == '0') { // xx.00
val = val.substr(0, val.length-1);
}
if (val.charAt(val.length-1) == '0') { // xx.0
val = val.substr(0, val.length-1);
}
if (val.charAt(val.length-1) == '.') { // xx.
val = val.substr(0, val.length-1);
}
这很管用,而且有一点直接,我有点喜欢,但也许有一种更漂亮的方式
我想我可以使用一个循环并运行三次,但实际上,当我条件化if语句时,它看起来至少会同样庞大。除此之外,还有什么想法吗?我想也有一种正则表达式的方法可以做到这一点……我相信它可以做到这一点
parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
parseFloat可以工作,但您必须将其转换回字符串。您的代码还可以在数字中删除零,如“1000”。一个更好的变体是只对小数点后的零进行切分。正则表达式的基本替换如下所示:
str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, ""); // remove trailing dot
所以你从一个字符串开始,你想要一个字符串结果,对吗
val = "" + parseFloat(val);
这应该行得通。更简洁
val = "" + +val;
或
也可以,但这种形式太难理解了
这些是如何工作的?它们将字符串转换为数字,然后再转换回字符串。您可能不想使用这些,但了解JavaScript转换的工作原理将有助于调试您所提出的任何问题。我现在正试图找到类似的解决方案。我就是这样来到这里的
string to string: parseFloat(value).toFixed(2);
string to number: +(parseFloat(value).toFixed(2))
number to number: Math.round(value*100)/100;
number to string: (Math.round(value*100)/100).toFixed(2);
我在应用程序中使用了Number()函数,但看起来它的工作原理与parseFloat()相同
在检查号码之前,我先删除和逗号
var valueAsNumber = Number( val.replace(/\,/g,'') );
我想这就是你想要的
v = 33.404034
v.toFixed(2) # v -> 33.40
parseFloat(v.toFixed(2)) # 33.4
你有
v = 33.00704034
v.toFixed(2) # v -> 33.01
parseFloat(v.toFixed(2)) # 33.01
v = 33.00304034
v.toFixed(2) # v -> 33.00
parseFloat(v.toFixed(2)) # 33
浮点可能没有足够的精度来准确表示给定的十进制值;你永远不应该用它们来表示货币。这是真的。我认为只要你不对它们进行操作,它们就会被正确地表示。在JavaScript中,无论如何都不能用十进制进行操作(没有一个在内部使用字符串或整数数组的十进制库)。最好使用0+而不是0*,这样如果没有尾随的零,正则表达式就不匹配。你是对的,0*与匹配的零0没有任何用处。但至少它也不会造成任何伤害。对于未来的研究人员来说:之前的评论不再相关
v = 33.404034
v.toFixed(2) # v -> 33.40
parseFloat(v.toFixed(2)) # 33.4
v = 33.00704034
v.toFixed(2) # v -> 33.01
parseFloat(v.toFixed(2)) # 33.01
v = 33.00304034
v.toFixed(2) # v -> 33.00
parseFloat(v.toFixed(2)) # 33