Number.prototype.toLocaleString() - JavaScript Number 对象
Number.prototype.toLocaleString()
toLocaleString()
方法返回这个数字在特定语言环境下的表示字符串。
新的locales
和options
参数让应用程序可以指定要进行格式转换的语言,并且定制函数的行为。在旧的实现中,会忽略locales
和options
参数,使用的语言环境和返回的字符串的形式完全取决于实现方式。
语法
numObj.toLocaleString([locales [, options]])
参数
查阅浏览器兼容性部分,了解哪些浏览器支持locales
和options
参数,通过示例:检查locales
和options
参数的支持了解特征检测。
注意: ECMAScript 国际化 API,在 Firefox 29 中得以实施,增加了locales
参数的Number.toLocaleString
方法。如果参数为undefined
,此方法返回本地操作系统指定的位数,而 Firefox 的早期版本中返回阿拉伯语数字。这一变化已被报告为向后影响的兼容性问题并可能会被尽快修复。(bug 999003)
locales
可选.缩写语言代码(BCP 47 language tag,例如:cmn-Hans-CN)的字符串或者这些字符串组成的数组.关于参数locales的一般形式和解释请参见Intl page.下面的这些Unicode扩展键也是被允许的:
译者注:下面扩展的使用方式是language[-scripts][-region]-u-nu-*,例如:zh-u-nu-hanidec(表示中文十进制数字)
nu
要使用的编号系统。可能的值有:"arab"
,"arabext"
,"bali"
,"beng"
,"deva"
,"fullwide"
,"gujr"
,"guru"
,"hanidec"(中文十进制数字)
,"khmr"
,"knda"
,"laoo"
,"latn"
,"limb"
,"mlym"
,"mong"
,"mymr"
,"orya"
,"tamldec"
,"telu"
,"thai"
,"tibt"
.options
可选.包含一些或所有的下面属性的类:
localeMatcher
使用的local的匹配算法.可能的值有"lookup"和"best fit";默认值是"best fit"
.有关此选项的信息,请参见 Intl page.style
格式化时使用的样式.可能的值有“decimal”表示纯数字格式, “currency”表示货币格式,和"percent"表示百分比格式
;默认值是"decimal"
.currency
在货币格式化中使用的货币符号.可能的值是ISO的货币代码(the ISO 4217 currency codes,)例如"USD"
表示美元,"EUR"
表示欧元, or "CNY"是人民币
—更多请参考 Current currency & funds code list.没有默认值,如果样式是“currency”,必须提供货币属性.currencyDisplay
如何在货币格式化中显示货币.可能的值有"symbol"表示
使用本地化的货币符号例如€,"code"表示
使用国际标准组织货币代码,"name"
表示使用本地化的货币名称,如"dollar"
;默认值是"symbol"
.useGrouping
是否使用分组分隔符,如千位分隔符或千/万/亿分隔符.可能的值是true和false,默认值是true.下面的属性分为两组:minimumintegerdigits,minimumfractiondigits,maximumfractiondigits作为一组,minimumsignificantdigits和maximumsignificantdigits作为一组.如果定义了第二组中的任意一个属性,则忽略第一组的设置.
minimumIntegerDigits
使用的整数数字的最小数目.可能的值是从1到21,默认值是1.minimumFractionDigits
使用的小数位数的最小数目.可能的值是从0到20;默认为普通的数字和百分比格式为0;默认为货币格式是由国际标准化组织列表(ISO 4217 currency code list)提供(如果列表中没有提供则值为2).maximumFractionDigits
使用的小数位数的最大数目。可能的值是从0到20;纯数字格式的默认值是minimumfractiondigits和3中大的那一个;货币格式默认值是minimumfractiondigits和国际标准化组织列表(如果列表中没有提供则值为2)中大的那一个;百分比格式默认值是minimumfractiondigits和0中大的那一个。minimumSignificantDigits
使用的有效数字的最小数目。可能的值是从1到21;默认值是1。maximumSignificantDigits
使用的有效数字的最大数量。可能的值是从1到21;默认是minimumsignificantdigits.返回值
返回一个语言环境下的表示字符串。
示例
使用toLocaleString
在没有指定区域的基本使用时,返回使用默认的语言环境和默认选项格式化的字符串。
var number = 3500; console.log(number.toLocaleString()); // Displays "3,500" if in U.S. English locale
检查locales
和options
参数的支持
locales
和options
参数目前还不是所有浏览器都支持的。在 ES5.1 和更新的实现中检查支持情况,可以依靠使用非法参数时规定抛出的RangeError
异常:
function toLocaleStringSupportsLocales() { var number = 0; try { number.toLocaleString('i'); } catch (e) { return e.name === 'RangeError'; } return false; }
早于 ES5.1 的实现中,如果带参数调用toLocaleString
并不会抛出范围异常。
在所有宿主环境下,包括那些支持比 ed 5.1 还早的 ECMA-262 的环境,都能有效检测的方法是直接检测 ECMA-402 中的其它特性,它指定Number.prototype.toLocaleString
需要支持地区选项:
function toLocaleStringSupportsOptions() { return !!(typeof Intl == 'object' && Intl && typeof Intl.NumberFormat == 'function'); }
它测试全局的Intl
对象,检测它不是null
并且有NumberFormat
的方法。
使用locales
这个示例展示了不同地区数字格式的差异。为了设置你的应用程序界面下使用的语言格式,请确保使用locales
参数指定了使用的语言(可能还有一些备用语言):
var number = 123456.789; // 德国使用逗号作为小数分隔符,分位周期为千位 console.log(number.toLocaleString('de-DE')); // → 123.456,789 // 在大多数阿拉伯语国家使用阿拉伯语数字 console.log(number.toLocaleString('ar-EG')); // → ١٢٣٤٥٦٫٧٨٩ // 印度使用千位/拉克(十万)/克若尔(千万)分隔 console.log(number.toLocaleString('en-IN')); // → 1,23,456.789 // nu 扩展字段要求编号系统,e.g. 中文十进制 console.log(number.toLocaleString('zh-Hans-CN-u-nu-hanidec')); // → 一二三,四五六.七八九 // 当请求不支持的语言时,例如巴厘语,加入一个备用语言,比如印尼语 console.log(number.toLocaleString(['ban', 'id'])); // → 123.456,789
使用options
通过toLocaleString
返回的结果可以通过options
参数进行定制:
var number = 123456.789; // 要求货币格式 console.log(number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })); // → 123.456,79 € // 日元不使用小数位 console.log(number.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' })) // → ¥123,457 // 限制三位有效数字 console.log(number.toLocaleString('en-IN', { maximumSignificantDigits: 3 })); // → 1,23,000
性能
当格式化大量数字时,最好建立一个NumberFormat.format
方法。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!