【问题标题】:JavaScript: Format whole numbers using toLocaleString()JavaScript:使用 toLocaleString() 格式化整数
【发布时间】:2014-02-27 12:10:26
【问题描述】:

我正在使用Number.prototype.toLocaleString() 函数将逗号添加到整数。可以在here找到它的文档。

我是这样写的:

Number(data).ToLocaleString('en');

在 Firefox/Chrome 中,数字显示为 123,456,789。但是,在 IE 中显示为 123,456,789.00

1. IE 为什么要添加小数点值?

2。如何删除小数点值?

与其创建/使用自定义函数,我真的只是想知道是否有一个选项可以添加到 ToLocaleString() 中,例如 en, nodecimal。如果该选项不可用,我会考虑使用自定义函数。

【问题讨论】:

  • 它真的在 Firefox 中输出?
  • 1) 这不是有效的 JS。 2) toLocaleString 根据规范是“依赖于实现的”。
  • @adeneo 是的。使用 v26
  • @p.s.w.g 哎呀。增加了一个额外的时间。改了。
  • @HarryPehkonen。我知道我可以更改我的计算机设置以实现个人所需的效果,但我的目标是为访问我网站的所有最终用户进行更改。我无法控制他们的计算机设置。

标签: javascript


【解决方案1】:

怎么样:

const sum = 1000;

const formatted = sum.toLocaleString("en", {   
    minimumFractionDigits: 0,
    maximumFractionDigits: 0,
});

console.log(formatted);

为:

// 1,000

或者如果你有钱:

const sum = 1000;

const formatted = sum.toLocaleString("en", {
    style: "currency",
    currency: "USD",
    minimumFractionDigits: 0,
    maximumFractionDigits: 0,
});

console.log(formatted);

为:

// $1,000

【讨论】:

  • 最近引入了minimumFractionDigitsmaximumFractionDigits 吗?当我问这个问题时,我不相信这是一个选择。
  • @Keven 你可能是对的。从谷歌搜索来看,它似乎在 2015 年就已经可用 stackoverflow.com/questions/31581011/… 所以可能在您询问后大约一年
【解决方案2】:

您在哪个版本的 IE 中进行了测试?在 IE 10 及更低版本中,toLocaleString 基于 ECMAScript 规范,该规范声明该函数应“依赖于实现”。在IE 11中,基于ECMA Internationalization API,应该与Firefox 26一致。

要删除 IE 10 及更低版本(可能还有其他较旧的浏览器)中的十进制值,您将不得不求助于字符串操作:

Number(data).toLocaleString('en').slice(0, -3);

此 API 还有 a polyfill available,它适用于 IE 10 及更低版本。目前包括它有点棘手,因为浏览器/缩小版本不包含实际数据(因为它会很大)。数据以 JSON 或 JSONP 格式单独提供,以便您可以为当前浏览您网站的用户下载正确的数据。

【讨论】:

  • 我在 IE9 及以下版本进行测试,需要支持 IE 10 及以下版本,所以看起来我需要操作。
  • 这在某些语言环境中不起作用。例如:Number(123534.34).toLocaleString('da-DK',{style:'currency',currency:"DKK"}) 显示为 123.534,34 kr.。相反,您应该将maximumFractionDigitsminimumFractionDigits 选项设置为0,指定为here。例如:Number(123534.34).toLocaleString('da-DK',{style:'currency',currency:"DKK",maximumFractionDigits:0, minimumFractionDigits:0}); 将显示 123.534 kr.
【解决方案3】:

1) 参考 Andy E 的 (1) 答案。

2) Andy E 的解决方案适用于 IE 10 及更低版本,但似乎在现代浏览器上导致错误输出(在控制台中尝试使用任意数字)。这是一个更安全的字符串操作:

Number(data).toLocaleString().split('.')[0];

*安迪我会将此作为评论添加到您的答案中,但我没有足够的声誉。

【讨论】:

  • 当你知道分隔符是一个点(“.”)时,这很好用,那么在法语和其他语言中逗号呢?
  • 这在某些语言环境中不起作用。例如:Number(123534.34).toLocaleString('da-DK',{style:'currency',currency:"DKK"}) 显示为 123.534,34 kr.。相反,您应该将maximumFractionDigitsminimumFractionDigits 选项设置为0,指定为here。例如:Number(123534.34).toLocaleString('da-DK',{style:'currency',currency:"DKK",maximumFractionDigits:0, minimumFractionDigits:0}); 将显示 123.534 kr.
【解决方案4】:

Number(data).toLocaleString().replace(/\D\d\d$/, '');应涵盖任何语言环境和浏览器。

【讨论】:

  • 很好的解决方案。保留千位分隔符。如果数字不包含小数(在以后的浏览器中),也不会发脾气。
  • 这在某些语言环境中不起作用。例如:Number(123534.34).toLocaleString('da-DK',{style:'currency',currency:"DKK"}) 显示为 123.534,34 kr.。相反,您应该将maximumFractionDigitsminimumFractionDigits 选项设置为0,指定here。例如:Number(123534.34).toLocaleString('da-DK',{style:'currency',currency:"DKK",maximumFractionDigits:0, minimumFractionDigits:0}); 将显示 123.534 kr.
  • 在 OP 的问题中,这不是他想要的吗?他只使用整数,而 IE 正在添加 .00 - 或者在你的情况下是“,00”
猜你喜欢
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2021-04-20
相关资源
最近更新 更多