十进制数与逗号和点Javascript之间的差异

时间:2016-02-02 10:30:26

标签: javascript jquery numbers

如果值为> = 0,我应该验证输入表单。

我使用jQuery获取值并使用简单的if语句进行验证。像这样:

var value = $('#'+this.id).val();
    console.log("value is " + value );
    if(value >=0 ){
      console.log("true");
    }else{
      console.log("false");
    }

当用户使用逗号或点插入十进制数时,问题会出现。 如果用户插入1.234,结果为true,如果插入1,234,结果为false

他们的区别是什么?

我做了一个简单的小提琴,以便更好地解释这个案例。

http://jsfiddle.net/zzm8zno5/4/

我也验证了价值的类型;我尝试使用Number(value)转换为数字而没有任何更改

对不起我的问题,也许是微不足道的,但我不明白为什么会发生这种情况

3 个答案:

答案 0 :(得分:3)

Javascript无法将逗号识别为小数点分隔符。您使用来使用点.

为此,您可以使用replace()更改值中的逗号。您还需要使用parseFloat()来比较值,否则您要将数字(0)与字符串('1.234')进行比较。试试这个:

var value = parseFloat($(this).val().replace(',', '.'));

Updated fiddle

最后,请注意在jQuery对象中仅使用this。由于您已经拥有对该元素的引用,因此您不需要构建另一个字符串选择器。如果您愿意,可以将其缩短至this.value

更新

假设1,234旨在表示1234并且未用作小数点分隔符,则您需要删除,而无需替换:

var value = parseFloat($(this).val().replace(',', ''));

答案 1 :(得分:1)

我同意@Rory关于删除逗号(',')除了你需要用点('。')替换它。我相信你想要发生的只是得到数字,而不是用点代替逗号。

1,234 = 1234 and not 1.234

仅使用此:

var value = parseFloat($(this).val().replace(',', ''));

这是来自@ rory的答案的JSFiddel update

答案 2 :(得分:0)

Javascript只知道64位双精度浮点变量。 你的逗号将双精度值分成两位小数。

您需要对输入(,to。)

进行字符串替换