我需要将格式化的数字转换为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)
提前感谢。
答案 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(',','') );
}