输入表单更改点到逗号第3个十进制错误

时间:2015-10-19 13:54:29

标签: javascript comma

我正在使用Firefox。如果将ParseFloat()或Number()应用于字符串或数字,然后将值更新为输入表单,则显示的数字的格式为逗号而不是点。但是出于神秘的原因,当使用3位小数时,它不起作用。

E.g。

1.1 --> 1,1
1.23 --> 1,23
1.3456 --> 1,3456

BUT

1.234 --> 1.234

这真的很奇怪..

<input type="number"  onKeyPress="if (event.keyCode == 13) { DotToComma(this); }"></input>

function DotToComma(that) {
        if (that.value.indexOf(".") >= 0) {
            var str = that.value;
            that.value = Number(str);
        }
}

你知道为什么吗?

我正在开发一个WebAPP,只有当我用逗号而不是点输入数字时,我的代码才有效。

2 个答案:

答案 0 :(得分:0)

看起来Javascript正试图将字符串解析回浮点而不是字符串。

只需添加toString()功能即可确保转换。您也可以使用String()对象进行转换。

function DotToComma(that) {
        if (that.value.indexOf(".") >= 0) {
            var str = that.value.toString();
            that.value = Number(str);
        }
}

您也可以像这样简化代码:

that.value = parseFloat(that.value.toString().replace(/./, ','));

答案 1 :(得分:0)

实际上你的功能不是问题,真正的问题是你试图在输入数字值中加一个无效的数字,这个值应该是这个模式000.000之后的有效数字而你不能使用逗号,你只能使用一个点,只能使用一个点。

W3C标准规定必须是 Floating-point number

检查以下示例,其中我对输入编号和输入文本使用相同的函数:

function DotToComma(that) {
  if (that.value.indexOf(".") >= 0) {
    var str = that.value.replace('.', ',');
    console.log(str);
    that.value = str;
  }
}
<input type="number" onKeyUp="if (event.keyCode == 13) { DotToComma(this); }"></input>
<br> an input text: 
<input type="text" onKeyUp="if (event.keyCode == 13) { DotToComma(this); }"></input>

您可以注意到普通文本输入将接受逗号,但不接受输入数字。