使用javascript切掉未使用的小数

时间:2009-06-18 21:52:59

标签: 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) == '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语句时会变得笨重。除此之外,还有什么想法吗?我想也有一种正则表达方式来做它....

7 个答案:

答案 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()的工作方式相同

http://jsfiddle.net/4WN5y/

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

 var valueAsNumber = Number( val.replace(/\,/g,'') );