如何阻止parseFloat()从零中删除到十进制右边

时间:2011-02-01 22:12:06

标签: javascript parsing

我有一个函数,我用来从字符串中删除不需要的字符(定义为货币符号),然后将值作为数字返回。返回值时,我正在进行以下调用:

return parseFloat(x);

我遇到的问题是,当x ==“0.00”时,我希望得到0.00(带有两位小数的浮点数)。我得到的只是0。

我也尝试了以下内容:

return parseFloat(x).toFixed(2);

仍然只是0回来。我错过了什么吗?任何帮助将不胜感激。

谢谢!

5 个答案:

答案 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
}