jquery 如何恢复到LocaleString

xt0899hw  于 2023-05-17  发布在  jQuery
关注(0)|答案(6)|浏览(140)

我需要将格式化的数字转换为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)
先谢谢你。

nhhxz33t

nhhxz33t1#

这不容易大多数评论都说“不要尝试-在数字本身上进行计算,而不是格式化的值”。
你需要弄清楚小数点和千位分隔符是什么。为此,您需要知道该数字转换为哪个区域设置。

(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);

}

没有办法计算出locale --你必须知道它并将它传递给函数。

gmxoilav

gmxoilav2#

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

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

mnemlml83#

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

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, ''));
dojqjjoe

dojqjjoe4#

是我做的,对我来说很好

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,'.'))
}
qaxu7uf2

qaxu7uf25#

如果你需要James Long的答案,但在TypeScript中,这里是:)
Answer credits to James Long

/**
 * This function will unformat a number that has been formatted using the passed locale
 * @param {string} number - The formatted number to unformat.
 * @param {string} locale - The locale used to format the number.
 * @returns {number} - Will return the unformatted number in case the conversion was successful,
 * otherwise it will return the original number using parseFloat to convert it to type number.
 */
export const unformatLocaleStringifyNumber = (
  number: string,
  locale: string,
): number => {
  const parts = (1234.5).toLocaleString(locale).match(/(\D+)/g);
  let unformatted = number;

  if (parts) {
    unformatted = unformatted.split(parts[0]).join('');
    unformatted = unformatted.split(parts[1]).join('.');
    return parseFloat(unformatted);
  }

  return parseFloat(number);
};
kt06eoxx

kt06eoxx6#

我的函数用于格式化和取消格式化货币数字为'en-US'。希望能帮上忙

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

相关问题