我正在使用此代码将数字转换为字符串:
ProductsData[0]['price'].toLocaleString();
我得到了被驱逐的输出:
8,499
但是相同的代码不适用于 Safari 。
请给我同样的建议.........
答案 0 :(得分:0)
虽然SELECT COUNT(`id`)
FROM `table`
WHERE `ratio` = 1
AND `id` < (SELECT `id` FROM `table` WHERE `ratio` != 1 ORDER BY `id` ASC LIMIT 0, 1)
(没有参数)适用于所有主流浏览器,但不幸的是,从一个浏览器到另一个浏览器的行为是不一致的。
如果一致的日期/时间格式很重要,我担心您需要建立自己的toLocaleString
版本或使用库。以下是一对值得研究的夫妇:
答案 1 :(得分:0)
今天我在使用这个功能的(几乎完整的)网站上遇到了这个问题,并且偶然发现了你的问题(Safari没有显示任何货币和/或数千/小数分隔符)。我写了一个小的覆盖函数来弹出并修复toLocaleString以满足我的需求(在欧洲和欧元(€))。
希望这可以帮助其他人遇到同样的问题。
(function() {
Number.prototype._toLocaleString = Number.prototype.toLocaleString;
Number.prototype.toLocaleString = function(locales,options) {
if(options.style == "currency") { // only format currencies.
var prepend = "";
if(options.currency == "EUR") {
prepend = "\u20AC "; // unicode for euro.
}
var val = this;
val = val;
// check if the toLocaleString really does nothing (ie Safari)
var tempValue = val._toLocaleString(locales,options);
if(tempValue == val.toString()) { // "broken"
return prepend+val.formatMoney(2); // <-- our own formatting function.
} else {
return tempValue;
}
} else {
return this._toLocaleString(locales,options);
}
};
Number.prototype.formatMoney = function(c, d, t){
var n = this,
c = isNaN(c = Math.abs(c)) ? 2 : c,
d = d == undefined ? "," : d,
t = t == undefined ? "." : t,
s = n < 0 ? "-" : "",
i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
j = (j = i.length) > 3 ? j % 3 : 0;
return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};
// demonstration code
var amount = 1250.75;
var formattedAmount = amount.toLocaleString('nl-NL', {style:'currency',currency: 'EUR'});
console.log(formattedAmount);
})();