13

我有一个货币输入,只需要返回有效数字。输入总是有两位小数,所以:

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 语句进行条件化时,它看起来至少会变得笨重。除此之外,还有什么想法吗?我想也有一种正则表达式的方式来做到这一点......

4

7 回答 7

15

我相信parseFloat()可以做到这一点。

parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
于 2009-06-18T21:54:56.890 回答
15

您的代码还会去掉“1000”等数字中的零。一个更好的变体是只去掉小数点后的零。正则表达式的基本替换如下所示:

str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, "");              // remove trailing dot
于 2009-06-18T21:59:19.737 回答
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);
于 2009-06-18T23:37:23.203 回答
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
于 2014-08-07T13:34:00.877 回答
2

所以你从一个字符串开始,你想要一个字符串结果,对吗?

val = "" + parseFloat(val);

那应该行得通。越简洁

val = "" + +val;

或者

val = +val + "";

也可以,但是这种形式太难理解了。

这些是如何工作的?他们将字符串转换为数字,然后再转换回字符串。您可能不想使用这些,但了解 JavaScript 转换的工作原理将帮助您调试您想出的任何东西。

于 2009-06-18T22:04:32.113 回答
1
String(4) // "4"
String(4.1) // "4.1"
String(4.10) // "4.1"
String(4.01) // "4.01"

parseFloat 有效,但您必须将其转换回字符串。

于 2009-06-18T21:58:48.940 回答
0

我现在正试图找到这样的解决方案。我就是这样来到这里的。

我在我的应用程序中使用了 Number() 函数,但看起来它与 parseFloat() 的工作方式相同

http://jsfiddle.net/4WN5y/

在检查号码之前,我删除和逗号。

 var valueAsNumber = Number( val.replace(/\,/g,'') );
于 2014-05-17T12:29:47.783 回答