Dinero.js 允许您用 JavaScript 表达货币价值。
您可以执行更改、转换、比较、广泛格式化它们,并总体上使您的应用程序中的金钱操作更容易、更安全。
复制链接为什么我还需要这个?
金钱比你想象的要复杂。它比您可以在number
类型中填充的内容要多得多。
浮点数学不准确
现在,您可能会number
在您的网站或应用程序中使用该类型来表示金钱。像这样的东西:
const cart = [
{
name: 'Mass Effect: Legendary Edition',
platform: 'Xbox One',
price: 69.99,
},
{
name: 'The Legend of Zelda: Breath of the Wild',
platform: 'Nintendo Switch',
price: 51.91,
}
];
您可能还使用算术运算符进行计算,结果如下:
const total = cart.reduce((acc, { price }) => acc + price, 0); // 121.89999999999999 😧
虽然某些编程语言(如 Java 或 C#)安全地支持任意精度小数,但 JavaScript 仅允许您使用双精度浮点数本机表示小数。限制是它使用二进制系统来表示十进制数,因此在尝试数学时最终会得到不准确的结果。
使用 IEEE 754 浮点数来存储货币值是一个坏主意。当您计算更多值时,难以察觉的精度误差会导致更大的差距。这不可避免地最终导致舍入问题。
复制链接金钱不仅仅是一个数字
当你看到下面的代码时,你能说出它的成本吗?
const item = {
name: 'Mass Effect: Legendary Edition',
platform: 'Xbox One',
price: 69.99,
};
如果您在美国,您可能会认为它是 69.99 美元。如果您住在欧盟,您可能会本能地购买 69.99 欧元。底线是,没有办法知道。你只能猜测。
货币价值的数量总是与其货币相关。没有十个“钱”这样的东西。它是十美元、十欧元、十比特币等。要将不同货币的两个金额相加,您需要先将它们转换。比较也是如此:如果您不知道这两个金额是否使用相同的货币,您就无法知道哪个金额较小或较大。金额和货币不能缺一不可。
类型安全
Dinero.js 是用 TypeScript 编写的,在操作金钱时给予你完全的类型安全。
数据统计
相关导航
暂无评论...