Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中区分区域性的ParseFloat函数?_Javascript_Cultureinfo - Fatal编程技术网

JavaScript中区分区域性的ParseFloat函数?

JavaScript中区分区域性的ParseFloat函数?,javascript,cultureinfo,Javascript,Cultureinfo,有没有人建议用JavaScript编写区分区域性的ParseFloat函数,这样当我使用美国区域性格式的字符串100000.22时,parse float函数将返回100000.22,而如果在瑞典区域性中输入100.000,22,它将返回100000.22 float?这有点粗糙,但可能已经足够了,允许您传入千位和十进制分隔符: function parseFloatOpts(num, decimal, thousands) { var bits = num.split(decimal,

有没有人建议用JavaScript编写区分区域性的ParseFloat函数,这样当我使用美国区域性格式的字符串100000.22时,parse float函数将返回100000.22,而如果在瑞典区域性中输入100.000,22,它将返回100000.22 float?

这有点粗糙,但可能已经足够了,允许您传入千位和十进制分隔符:

function parseFloatOpts(num, decimal, thousands) {
    var bits = num.split(decimal, 2),
        ones = bits[0].replace(new RegExp('\\' + thousands, 'g'), '');
        ones = parseFloat(ones, 10),
        decimal = parseFloat('0.' + bits[1], 10);
        return ones + decimal;
}
示例:

parseFloatOpts("100.000,22", ',', '.'); //100000.22
parseFloatOpts("100,000.22", '.', ','); //100000.22
请注意,这并不能确保千位分隔符确实代表千位,等等,或者根据功能的重要性执行许多其他您可能希望执行的保护操作

var parse = function(st){
   if(st.indexOf(",") === st.length-3){
      st = st.replace(".", "").replace(",", ".");
   }else{
       st = st.replace(",", "");
   }
   return parseFloat(st, 10)
}

console.log(parse("100,000.22")) // 100000.22
console.log(parse("100.000,22")) // 100000.22

我只是在检查倒数第三位是否有逗号。如果e不是逗号(例如100.000),则可以进一步细化该值,以检查从第4位到最后一位是否有一个句点。

看着lonesomday,我产生了这样的想法:

你也可以这样做:

function parse (str)
    var ar = str.split(/\.|,/);  
    return Number(ar[0]+ar[1]+"."+ar[3]);

这是一个粗略的函数。它将假定最后一个标点符号表示小数,无论是逗号、句点还是您可能需要指示的任何其他字符。然后从整数中删除其他标点符号。将其放回一起并解析为float

function normalizeFloat(number, chars) {

    var lastIndex = -1;
    for(i=0; i < chars.length; i++) {
        t = number.lastIndexOf(chars[i]);

        if (t > lastIndex) {
            lastIndex = t;
        }
    }

    if (lastIndex == -1) {
        lastIndex = number.length;
    }

    var whole = number.substring(0, lastIndex);   
    var precision = number.substring(lastIndex);
    for (i=0; i < chars.length; i++) {
        whole = whole.replace(chars[i], '');
        precision = precision.replace(chars[i],'.');           
    }
    number = whole + precision;

    f = parseFloat(number);
    return f;
}

我改进了mwilcox函数,以使用分隔符处理值

function parseFloatOpts (str) {

     if(typeof str === "number"){
         return str;
     }

     var ar = str.split(/\.|,/);  

     var value = '';
     for (var i in ar) {
         if (i>0 && i==ar.length-1) {
             value += ".";
         }
         value +=ar[i];
     }
     return Number(value);
}

需要使用区域性信息中的当前组和小数分隔符

function escapeRegExp(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
    }

function parseFloatOpts(str, groupSeparator, decimalSeparator) {

        if (typeof str === "number") {
            return str;
        }

        var value = str.replace(new RegExp(escapeRegExp(groupSeparator), 'g'), "");
        value = value.replace(decimalSeparator, ".");

        return Number(value);
    }

如果您真的希望在JavaScript的不同语言环境中显示和/或解析浮动(或日期、货币或更多),那么我建议使用GlobalizeJS()库


一开始设置起来有点困难(至少在我的经验中是这样),但完全建议对这件事进行适当的管理。

我不知道这是否是一个文化问题,它是一个
问题。当我为ASP.Net应用程序编写解决方案时,我设法解决了我的问题,而没有为它编写任何自定义解决方案。因为MSDN库提供了JavaScript基本类型扩展方法,其中一种是数字类型扩展,它具有函数localeFormat和parseLocale。这些函数提供从/到十进制格式w.r.t区域性的转换。您也可以从服务器设置区域性,否则这些函数将使用默认区域性。请参阅此链接。在我的例子中,我必须设置sv SE,因为我需要使用瑞典文化来形成数字。对于数千个分隔符的可变数字,这可能会重复。谢谢你的回答,我能够在ASP.Net中解决这个问题。请参阅我的原始帖子中的上述回复。
function escapeRegExp(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
    }

function parseFloatOpts(str, groupSeparator, decimalSeparator) {

        if (typeof str === "number") {
            return str;
        }

        var value = str.replace(new RegExp(escapeRegExp(groupSeparator), 'g'), "");
        value = value.replace(decimalSeparator, ".");

        return Number(value);
    }