【问题标题】:Difference between decimal number with comma and dot Javascript带逗号和点Javascript的十进制数之间的区别
【发布时间】:2016-02-02 10:30:26
【问题描述】:

如果值 >= 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

它们有什么区别?

我做了一个简单的 Fiddle 来更好地解释这个案例。

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

我还验证了值的类型;我尝试使用Number(value) 转换为数字,但没有任何变化

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

【问题讨论】:

  • 如果用户输入 1.234,55 或 1,234.55 会发生什么。简单地替换 (.) 会产生错误的结果(错误的数字)

标签: javascript jquery numbers


【解决方案1】:

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,234 时,他/她指的是 1234,而不是 1.234。这个答案应该更新。
【解决方案2】:

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

1,234 = 1234 and not 1.234

只用这个:

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

这是@rory 的回答中的JSFiddel update

【讨论】:

    【解决方案3】:

    Javascript 只知道 64 位双精度浮点变量。 您的逗号将双精度数拆分为两位小数。

    您需要将输入的字符串替换为 (, 到 .)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      相关资源
      最近更新 更多