2015-10-19 65 views
1

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

E.g.

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

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,我的代码只在使用逗号而不是点输入数字时才起作用。

回答

0

它看起来像JavaScript试图解析字符串回到一个浮动而不是一个字符串。

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

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

你也可以simplfy像这样的代码:

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

这不起作用。实际上,当我使用3个小数时,that.value.indexOf(“。”)等于-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>

你可以注意到,一个普通的文本输入将接受逗号,但不是输入号码。

+0

谢谢你的回答。其实这不完全是。事实是,如果我输入“123.123”,该值被认为是123123.“点”字符被删除!这绝对是无意义的。因为小数点以下或小数点以下的数字不是这种情况!请帮忙 –

相关问题