我正在开发一个用 TypeScript 编写的银行应用程序前端。
从后端,我收到:
- an amount with 2 decimal places (e.g. account balance) in string. This can potentially be a large value - over 15 digits before the decimal point.
- 其格式为:
"32012012012012312.09"
- 货币代码字符串(例如
"USD"
)
我想使用千位分隔符、货币符号和 NBSP/NNBSP 处理来格式化金额,所有这些都与提供的区域设置相关。最简单的方法是什么?
是否有针对部分问题的潜在解决方案?例如。 1. 格式化数字和 2. 格式化货币符号。
我尝试过的:
-
Intl.NumberFormat
- 我喜欢,但是需要一点时间number | bigint
(虽然它不会因字符串而崩溃),但它在大十进制数时不再精确 - 例如它格式化32_012_012_012_012_312.09
as 32,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 €"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)