javascript - 如何在 JavaScript 中使用货币和相对于语言环境来格式化一个大数字(由字符串表示)?

标签 javascript locale number-formatting bigdecimal currency-formatting

我正在开发一个用 TypeScript 编写的银行应用程序前端。
从后端,我收到:

  • 字符串中带有 2 位小数的金额(例如账户余额)。这可能是一个很大的值 - 小数点前超过 15 位。
  • 其格式为:"32012012012012312.09"

  • 货币代码字符串(例如 "USD" )

  • 我想用千位分隔符、货币符号和 NBSP/NNBSP 处理来格式化金额,所有这些都与提供的语言环境有关。最简单的方法是什么?
    部分问题是否有潜在的解决方案?例如。 1.格式化数字和2.用货币符号格式化。
    我尝试了什么:
  • Intl.NumberFormat - 我喜欢它,但它需要 number | bigint (虽然它不会因字符串而崩溃),但它在大十进制数上不再精确 - 例如它格式化 32_012_012_012_012_312.0932,012,012,012,012,310.00 - 我相信这是关于数字的 JavaScript 限制,这就是为什么我正在寻找处理字符串的东西
  • accounting-js - formatMoney具有字符串和数字的函数 - 结果相同,但缺少在
  • 中传递语言环境的功能
  • 寻找有关此主题的其他库和线程-我对 big/bignumber/decimal.js 和 numeric.js 进行了一些研究,没有尝试过,但我相信它们是关于处理大数字,而不是格式化甚至基于语言环境的格式化
  • 最佳答案

    不确定它是否适用于所有语言/语言环境:

    const [main, decimal] = "32_012_012_012_012_312.09".split(".")
    const mainNumber = BigInt(main.replaceAll('_', ''))
    const decimalNumber = Number.parseFloat('0.' + decimal)
    
    const start = mainNumber.toLocaleString('de-DE') // "32.012.012.012.012.312"
    const end = decimalNumber.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }) // "0,09 €"
    
    const result = start + end.substr(1) // "32.012.012.012.012.312,09 €"
    

    关于javascript - 如何在 JavaScript 中使用货币和相对于语言环境来格式化一个大数字(由字符串表示)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68848954/

    相关文章:

    javascript - "react-native link"到底是做什么的?

    linux - GNU gettext 故障排除

    c# - 调整 "G"格式说明符显示指数格式的方法(或替换为自定义数字字符串)

    java - 如何格式化 double ,使其永远不会显示科学记数法?

    javascript - JQuery 数字格式

    javascript - Vue.js 重复添加同一个类创建 "just updated"效果

    javascript - 完全禁用父元素的焦点

    javascript - jQuery offset().top 返回错误值 - 边距错误

    c - 如何修复语言环境?

    java - DecimalFormat 和 DateFormat 默认使用什么区域设置? (为什么它与 Locale.getDefault() 不同?)