我有货币输入,只需返回有效数字。输入始终有两个小数位,因此:
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语句时会变得笨重。除此之外,还有什么想法吗?我想也有一种正则表达方式来做它....
答案 0 :(得分:14)
我相信parseFloat()会这样做。
parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
答案 1 :(得分:14)
您的代码也会删除“1000”等数字中的零。一个更好的变体是只能在小数点后面切出零。正则表达式的基本替换如下所示:
str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, ""); // remove trailing dot
答案 2 :(得分:4)
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);
答案 3 :(得分:3)
我认为这就是你想要的
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
答案 4 :(得分:2)
所以你从一个字符串开始,你想要一个字符串结果,是吗?
val = "" + parseFloat(val);
那应该有用。更简洁
val = "" + +val;
或
val = +val + "";
也可以,但这种形式太难理解了。
这些如何运作?他们将字符串转换为数字然后再转换为字符串。您可能不想使用这些,但了解JavaScript转换的工作原理将有助于您调试所做的任何事情。
答案 5 :(得分:1)
String(4) // "4"
String(4.1) // "4.1"
String(4.10) // "4.1"
String(4.01) // "4.01"
parseFloat有效,但您必须将其强制转换为字符串。
答案 6 :(得分:0)
我正试图找到这样的解决方案。这就是我到达这里的方式。
我在我的应用程序中使用了Number()函数,但看起来它和parseFloat()的工作方式相同
我在检查号码之前删除了逗号。
var valueAsNumber = Number( val.replace(/\,/g,'') );