【问题标题】:toLocaleString doesn't return 1qd, instead it returns 1000TtoLocaleString 不返回 1qd,而是返回 1000T
【发布时间】:2020-07-30 17:04:22
【问题描述】:

我使用Berezaa's method作为数字缩写,使用toLocaleString作为后缀,但是输入1千万亿时函数返回1000T而不是1qd

function Convert(Input) {
     var Negative = Input < 0
     Input = Math.Abs(Input)
     Input = Input.toLocaleString(undefined, {notation: "compact"})
     if (Negative) {
         return "-" + Input
    }
    return Input // returns 1.0k for example
}
function AbbreviateNumeral(numeral) {
   return numeral.toLocaleString()
}

如何修复这个错误?

console.log(转换(1000)) 打印 1K 而不是 1.0k

https://devforum.roblox.com/t/how-can-i-turn-a-number-to-a-shorter-number-i-dont-know-how-to-explain-click-to-understand-3/649496/5 说

Text = AbbreviateNumeral(10000) --the text will be 10,000
Text = Convert(10000) --the text will be 10k

但第二个返回 10K 而不是 10k

我找不到 javascript 的 string.gsub 和 string.match,我找到了 toLocaleString,这正是我想要的,除了数字缩写,所以我使用了它。

【问题讨论】:

  • 不知道你为什么说你正在使用 Berezaa 的方法。看起来你完全依赖Number.toLocaleString

标签: javascript locale


【解决方案1】:

您没有得到相同输出的一个可能原因是您的浏览器的区域设置/语言不同。您将undefined 作为locale 传递,并且在未指定区域设置时默认采用浏览器的区域设置。

let value = 10000;
let opts = {  notation: 'compact' };

function printLocale(locale) {
  console.log('With locale "%s": %s', locale, value.toLocaleString(locale, opts));
}

console.log('With your locale (%s): %s', navigator.language, value.toLocaleString(undefined, opts));

[ 'af-ZA', 'am-ET', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO',
  'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'arn-CL', 'ar-OM', 'ar-QA', 'ar-SA',
  'ar-SY', 'ar-TN', 'ar-YE', 'as-IN', 'az-Cyrl-AZ', 'az-Latn-AZ', 'ba-RU',
  'be-BY', 'bg-BG', 'bn-BD', 'bn-IN', 'bo-CN', 'br-FR', 'bs-Cyrl-BA',
  'bs-Latn-BA', 'ca-ES', 'co-FR', 'cs-CZ', 'cy-GB', 'da-DK', 'de-AT',
  'de-CH', 'de-DE', 'de-LI', 'de-LU', 'dsb-DE', 'dv-MV', 'el-GR', 'en-029',
  'en-AU', 'en-BZ', 'en-CA', 'en-GB', 'en-IE', 'en-IN', 'en-JM', 'en-MY',
  'en-NZ', 'en-PH', 'en-SG', 'en-TT', 'en-US', 'en-ZA', 'en-ZW', 'es-AR',
  'es-BO', 'es-CL', 'es-CO', 'es-CR', 'es-DO', 'es-EC', 'es-ES', 'es-GT',
  'es-HN', 'es-MX', 'es-NI', 'es-PA', 'es-PE', 'es-PR', 'es-PY', 'es-SV',
  'es-US', 'es-UY', 'es-VE', 'et-EE', 'eu-ES', 'fa-IR', 'fi-FI', 'fil-PH',
  'fo-FO', 'fr-BE', 'fr-CA', 'fr-CH', 'fr-FR', 'fr-LU', 'fr-MC', 'fy-NL',
  'ga-IE', 'gd-GB', 'gl-ES', 'gsw-FR', 'gu-IN', 'ha-Latn-NG', 'he-IL',
  'hi-IN', 'hr-BA', 'hr-HR', 'hsb-DE', 'hu-HU', 'hy-AM', 'id-ID', 'ig-NG',
  'ii-CN', 'is-IS', 'it-CH', 'it-IT', 'iu-Cans-CA', 'iu-Latn-CA', 'ja-JP',
  'ka-GE', 'kk-KZ', 'kl-GL', 'km-KH', 'kn-IN', 'kok-IN', 'ko-KR', 'ky-KG',
  'lb-LU', 'lo-LA', 'lt-LT', 'lv-LV', 'mi-NZ', 'mk-MK', 'ml-IN', 'mn-MN',
  'mn-Mong-CN', 'moh-CA', 'mr-IN', 'ms-BN', 'ms-MY', 'mt-MT', 'nb-NO',
  'ne-NP', 'nl-BE', 'nl-NL', 'nn-NO', 'nso-ZA', 'oc-FR', 'or-IN', 'pa-IN',
  'pl-PL', 'prs-AF', 'ps-AF', 'pt-BR', 'pt-PT', 'qut-GT', 'quz-BO', 'quz-EC',
  'quz-PE', 'rm-CH', 'ro-RO', 'ru-RU', 'rw-RW', 'sah-RU', 'sa-IN', 'se-FI',
  'se-NO', 'se-SE', 'si-LK', 'sk-SK', 'sl-SI', 'sma-NO', 'sma-SE', 'smj-NO',
  'smj-SE', 'smn-FI', 'sms-FI', 'sq-AL', 'sr-Cyrl-BA', 'sr-Cyrl-CS',
  'sr-Cyrl-ME', 'sr-Cyrl-RS', 'sr-Latn-BA', 'sr-Latn-CS', 'sr-Latn-ME',
  'sr-Latn-RS', 'sv-FI', 'sv-SE', 'sw-KE', 'syr-SY', 'ta-IN', 'te-IN',
  'tg-Cyrl-TJ', 'th-TH', 'tk-TM', 'tn-ZA', 'tr-TR', 'tt-RU', 'tzm-Latn-DZ',
  'ug-CN', 'uk-UA', 'ur-PK', 'uz-Cyrl-UZ', 'uz-Latn-UZ', 'vi-VN', 'wo-SN',
  'xh-ZA', 'yo-NG', 'zh-CN', 'zh-HK', 'zh-MO', 'zh-SG', 'zh-TW', 'zu-ZA'
].forEach(printLocale);

因此,您可能想要使用语言环境,也许您会找到与您想要的结果相匹配的语言环境。这个link 可能会有所帮助,我还创建了this,这样可以更轻松地找到您想要的东西。

【讨论】:

  • 鉴于 OP 的问题尚不清楚,因此此答案中的任何内容都没有解决提到的任何问题。大于 10^2 的数字的后缀不正确:.1000T 而不是 1qd。一个用例的精度不正确:1000 仍然打印为 1K 而不是 1.0k 并且后缀大小写仍然不正确:10000 给出为 10K,而不是 10k(不知道为什么 OP期望此用例的精度不同)
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 2017-03-10
  • 2018-03-08
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多