我有一个函数,我用来从字符串中删除不需要的字符(定义为货币符号),然后将值作为数字返回。返回值时,我正在进行以下调用:
return parseFloat(x);
我遇到的问题是,当x ==“0.00”时,我希望得到0.00(带有两位小数的浮点数)。我得到的只是0。
我也尝试了以下内容:
return parseFloat(x).toFixed(2);
仍然只是0回来。我错过了什么吗?任何帮助将不胜感激。
谢谢!
答案 0 :(得分:14)
parseFloat()将字符串转换为浮点数。这是二进制值,而不是十进制表示,因此小数点右边的零数概念甚至不适用;这一切都取决于它如何格式化回字符串。关于toFixed,我建议将浮点数转换为数字:
new Number(parseFloat(x)).toFixed(2);
答案 1 :(得分:10)
这应该有效:
return parseFloat(x).toFixed(2);
你可以通过在firebug中运行它来测试它:
var x = '0.00';
alert(parseFloat(x).toFixed(2));
答案 2 :(得分:5)
简单:
function decimalPlaces(float,length) {
ret = "";
str = float.toString();
array = str.split(".");
if(array.length==2) {
ret += array[0] + ".";
for(i=0;i<length;i++) {
if(i>=array[1].length) ret += '0';
else ret+= array[1][i];
}
}
else if(array.length == 1) {
ret += array[0] + ".";
for(i=0;i<length;i++) {
ret += '0'
}
}
return ret;
}
document.write(decimalPlaces(3.123,6));
答案 3 :(得分:0)
对于将来的读者,我遇到了这个问题,因为我想将textField的onChange
值解析为一个浮点数,以便在用户键入时可以更新我的模型。
问题出在小数点后,诸如12.120
之类的值将被解析为12.12
,因此用户永远无法输入诸如12.1201
之类的值。
我解决的方法是检查 STRING 值是否包含小数位,然后将字符串拆分为该小数位,然后计算该位之后的字符数,然后格式化随特定数量的地方浮动。
说明:
const hasDecimal = event.target.value.includes(".");
const decimalValue = (hasDecimal ? event.target.value.split(".") : [event.target.value, ""])[1];
const parsed = parseFloat(event.target.value).toFixed(decimalValue.length);
const value = isNaN(parsed) ? "" : parsed;
onEditValue(value);
答案 4 :(得分:0)
这是需要的人的动态版本的floatParser
function customParseFloat(number){
if(isNaN(parseFloat(number)) === false){
let toFixedLength = 0;
let str = String(number);
// You may add/remove seperator according to your needs
[".", ","].forEach(seperator=>{
let arr = str.split(seperator);
if( arr.length === 2 ){
toFixedLength = arr[1].length;
}
})
return parseFloat(str).toFixed(toFixedLength);
}
return number; // Not a number, so you may throw exception or return number itself
}