我需要将网络表单中输入的浮点值与范围进行比较。问题是客户端计算机可能具有各种区域设置,这意味着用户可以使用“。”。或“,”将整数部分与十进制部分分开。
有一种简单的方法吗?就像内联网一样,它们只允许使用IE,即使我更喜欢使用JavaScript,也可以使用VBScript。
编辑:让我澄清一下:
我不能依赖系统区域设置,因为,例如,我们的许多法国客户使用具有英语区域设置的计算机,即使他们仍然使用逗号来填充网络表单中的数据。
因此,我需要一种方法来执行多个区域设置“字符串到双倍”转换的检查
我知道提升条件是“带有3位小数的数字怎么样”,但在我们的环境中,这种答案永远不会发生,如果它发生,它会因为乘以一个超出范围的误差而被威胁一千,所以这对我们来说不是一个真正的问题。
答案 0 :(得分:1)
在Javascript中使用parseFloat
对文本值进行编号。同样在VBScript中对文本值使用CDbl
。两者都应符合用户强制执行的当前区域设置。
答案 1 :(得分:1)
此代码应该有效:
function toFloat(localFloatStr)
var x = localFloatStr.split(/,|\./),
x2 = x[x.length-1],
x3 = x.join('').replace(new RegExp(x2+'$'),'.'+x2);
return parseFloat(x3);
// x2 is for clarity, could be omitted:
//=>x.join('').replace(new RegExp(x[x.length-1]+'$'),'.'+x[x.length-1])
}
alert(toFloat('1,223,455.223')); //=> 1223455.223
alert(toFloat('1.223.455,223')); //=> 1223455.223
// your numbers ;~)
alert(toFloat('3.123,56')); //=> 3123.56
alert(toFloat('3,123.56')); //=> 3123.56
答案 2 :(得分:0)
我们所做的是尝试使用用户的文化进行解析,如果不起作用,请使用不变的文化进行解析。
我不知道如何在javascript或vbscript中完成它。
答案 3 :(得分:0)
我使用了KooiInc的答案但稍微改了一下,因为它没有考虑到某些情况。
function toFloat(strNum) {
var full = strNum.split(/[.,]/);
if (full.length == 1) return parseFloat(strNum);
var back = full[full.length - 1];
var result = full.join('').replace(new RegExp(back + '$'), '.' + back);
return parseFloat(result);
}
答案 4 :(得分:-1)
禁止使用任何千位分隔符。
为用户提供一个示例:“Reals应如下所示:3123.56
或3123,56
”。然后,只需将,
更改为.
并解析它。
你总是可以告诉用户他对这样的消息做错了什么:
"I don't understand what you mean by "**,**,**".
Please format numbers like "3123.56."