我有一个货币输入需要返回只显著数字。 输入总有两位小数,所以:
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()来实现的。
parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
你的代码也砍掉零的号码,如“1000”。 一个更好的方法将是一个小数点后零的唯一印章。 基本替代使用正则表达式应该是这样的:
str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, ""); // remove trailing dot
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);
我想这是你想要的
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
所以,你开始用绳子和你想要一个字符串结果,是这样吗?
val = "" + parseFloat(val);
这应该工作。 更简洁
val = "" + +val;
要么
val = +val + "";
将工作为好,但这种形式是太难理解了。
如何做这些工作? 他们将字符串转换为数字,然后回字符串。 你可能不希望使用这些,但我们知道JavaScript的转换工作将如何帮助您调试,不管你做了这一愿望。
String(4) // "4"
String(4.1) // "4.1"
String(4.10) // "4.1"
String(4.01) // "4.01"
parseFloat工作,但你必须将它转换回一个字符串。
我想现在就找到一个这样的解决方案。 这是我来到这里。
我用数()我的应用程序的功能,但看起来像它的工作一样parseFloat()
http://jsfiddle.net/4WN5y/
我删除和检查号码前的逗号。
var valueAsNumber = Number( val.replace(/\,/g,'') );