如何比较依赖于语言环境的浮点数?

时间:2009-02-10 12:14:46

标签: javascript vbscript

我需要将网络表单中输入的浮点值与范围进行比较。问题是客户端计算机可能具有各种区域设置,这意味着用户可以使用“。”。或“,”将整数部分与十进制部分分开。

有一种简单的方法吗?就像内联网一样,它们只允许使用IE,即使我更喜欢使用JavaScript,也可以使用VBScript。

编辑:让我澄清一下:

我不能依赖系统区域设置,因为,例如,我们的许多法国客户使用具有英语区域设置的计算机,即使他们仍然使用逗号来填充网络表单中的数据。
因此,我需要一种方法来执行多个区域设置“字符串到双倍”转换的检查 我知道提升条件是“带有3位小数的数字怎么样”,但在我们的环境中,这种答案永远不会发生,如果它发生,它会因为乘以一个超出范围的误差而被威胁一千,所以这对我们来说不是一个真正的问题。

5 个答案:

答案 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.563123,56”。然后,只需将,更改为.并解析它。

你总是可以告诉用户他对这样的消息做错了什么:

"I don't understand what you mean by "**,**,**".  
Please format numbers like "3123.56."