如果值为> = 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)
转换为数字而没有任何更改
对不起我的问题,也许是微不足道的,但我不明白为什么会发生这种情况
答案 0 :(得分:3)
Javascript无法将逗号识别为小数点分隔符。您使用来使用点.
。
为此,您可以使用replace()
更改值中的逗号。您还需要使用parseFloat()
来比较值,否则您要将数字(0
)与字符串('1.234'
)进行比较。试试这个:
var value = parseFloat($(this).val().replace(',', '.'));
最后,请注意在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。)
进行字符串替换