dinero.js
美国
Web前端JavaScript

dinero.js

Dinero.js 允许您用 JavaScript 表达货币价值。

标签:
其他站点:GitHub

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 编写的,在操作金钱时给予你完全的类型安全。

 

数据统计

相关导航

暂无评论

暂无评论...