如何恢复到LocaleString

时间:2018-02-23 15:07:02

标签: javascript jquery globalization

我需要将格式化的数字转换为JS默认数字格式。

这是我的代码:

String.prototype.toJsFloatFormat = function() {
          debugger;
          var newVal = this;
          return newVal;
        }
//Example of use
var input = 10000.22; //default js format
var formatted = input.toLocaleString("es"); // result is: 10.000,22
var unformatted = formatted.toJsFloatFormat(); //expected result = 10000.22;

问题是当我需要获取格式化的数字(10.000,22)并使用此格式化的数字(parseFloat(10.000,22)+ 1000)进行操作时,我的结果不好(parseFloat(10.000,22)+ 1000 = 1010)

提前感谢。

5 个答案:

答案 0 :(得分:0)

这并不容易。这就是为什么大多数评论都说“不要试试 - ”的原因 -  对数字本身进行计算,而不是格式化值"。

你需要弄清楚小数和千位分隔符是什么。为此,您需要知道编号转换为哪个区域设置。

(1234.5).toLocaleString("es").match(/(\D+)/g);
// -> [".", ","]

完成后,您可以替换格式化字符串中的字符。

function unformatString(string, locale) {

    var parts = (1234.5).toLocaleString(locale).match(/(\D+)/g);
    var unformatted = string;

    unformatted = unformatted.split(parts[0]).join("");
    unformatted = unformatted.split(parts[1]).join(".");

    return parseFloat(unformatted);

}

没有办法解决语言环境 - 您必须知道它并将其传递给函数。

答案 1 :(得分:0)

无需重新发明轮子- https://github.com/globalizejs/globalize#readme

var input = 10000.22; 
Globalize.parseFloat(input );

答案 2 :(得分:0)

我是这样做的(在我的例子中它是'ru'本地格式,所以我确实替换了'空格'符号):

var myNumber = 1000000;

var formated = myNumber.toLocaleString('ru');
var unformated = parseInt(formated.replace(/\s/g, ''));

你的情况:

var formated = myNumber.toLocaleString('en');
var unformated = parseInt(formated.replace(/,/g, ''));

答案 3 :(得分:0)

我这样做了,这对我来说很好

    function localeStringToFloat(locale){
    if(!locale) return locale

    let test=1000
    test=test.toLocaleString(undefined,{minimumFractionDigits: 2,maximumFractionDigits: 2});
    let separator=test[1]
    let decimalSeparator=test[5]

    return parseFloat(locale.replaceAll(separator,'').replace(decimalSeparator,'.'))
}

答案 4 :(得分:0)

我将货币数字格式化和取消格式化为“en-US”的函数。希望有帮助

function myFormatPrice(num,digits){
    return num.toLocaleString('en-US', {maximumFractionDigits:digits});
}
function myUnFormatPrice(formated){
    return parseFloat( formated.replaceAll(',','') );
}