Javascript 如何阻止parseFloat()将零剥离到小数点右侧

Javascript 如何阻止parseFloat()将零剥离到小数点右侧,javascript,parsing,Javascript,Parsing,我有一个函数,用于从字符串中删除不需要的字符(定义为货币符号),然后将值作为数字返回。返回值时,我正在进行以下调用: 返回浮点(x) 我的问题是,当x==“0.00”时,我希望返回0.00(一个带两个小数的浮点)。我得到的只是0 我还尝试了以下方法: 返回parseFloat(x).toFixed(2) 并且仍然只得到0。我错过什么了吗?任何帮助都将不胜感激 谢谢 这应该有效: return parseFloat(x).toFixed(2); 您可以在firebug中运行以下命令进行测试: v

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

返回浮点(x)

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

我还尝试了以下方法:

返回parseFloat(x).toFixed(2)

并且仍然只得到0。我错过什么了吗?任何帮助都将不胜感激

谢谢

这应该有效:

return parseFloat(x).toFixed(2);
您可以在firebug中运行以下命令进行测试:

var x = '0.00';
alert(parseFloat(x).toFixed(2));
parseFloat()将字符串转换为浮点数。这是一个二进制值,而不是十进制表示,因此小数点右侧的零数概念甚至不适用;这完全取决于如何将其格式化回字符串。关于toFixed,我建议将浮点数转换为一个数字:

new Number(parseFloat(x)).toFixed(2);
简单:

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));
函数小数位数(浮点,长度){
ret=“”;
str=float.toString();
数组=str.split(“.”);
if(array.length==2){
ret+=数组[0]+>;
对于(i=0;i=数组[1]。长度)ret+=0';
else-ret+=数组[1][i];
}
}
else if(array.length==1){
ret+=数组[0]+>;

对于(i=0;i对于未来的读者,我有这个问题,因为我想将文本字段的
onChange
值解析为一个float,以便用户键入我可以更新我的模型

问题在于小数点,像
12.120
这样的值将被解析为
12.12
,因此用户永远不能输入像
12.1201
这样的值

我解决这个问题的方法是检查字符串值是否包含一个小数位,然后在该小数位处拆分字符串,然后计算该小数位后的字符数,然后使用特定的位数格式化浮点

举例说明:

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);

下面是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
}

@Ted Hopp-无论OP的状态如何,我已经在IE 8、Safari、Firebug和Chrome JS控制台中尝试过了,我给Victor+1,因为这是正确的,至少在我测试的范围内是正确的。@jball-很高兴知道。我本来希望JS自动装箱一个数字中的基本浮点,以便调用toFixed,但不管OP在什么环境中使用g有点奇怪。+1这应该行得通。不过,如果我们说“0.000”,会发生什么呢?@JCOC611它总是返回一个字符串。这会返回一个字符串,而不是一个数字。我认为这是一个解决方案,因为你需要一个字符串来打印,而不是一个数字,因为我认为你需要3.00==3,但你想打印一个小数点后两位的数字。它不是四舍五入的。如果2.009应该是2.01如果x=
2.00
'2.00'
,你仍然可以得到字符串表示法
'2.00'
@ConAntonakos-嗯,是的,这就是要点。浮点值中不能有“尾随零”,只能在值的字符串表示法中。我知道,但我希望您可以保留浮点,而无需将其强制为字符串(@ConAntonakos-如果您只想要一个浮点数,只需直接使用
parseFloat(x)
,而无需其他任何操作。如果您想要
number
对象,请使用
新的数字(parseFloat(x))
。如果希望字符串表示法保留固定的小数位数,请使用答案。只有字符串表示法提供了“小数点右侧的尾随零”那个OP是需要的。明显的提醒,如果你没有从事件中获取这个值,确保你的值是以字符串的形式出现的。有一个0数字的潜行,一旦它到达QA就中断了