JavaScript:十进制值

Mr.*_*. X 25 javascript decimal

我可以在JavaScript中使用什么十进制类型?它不受支持(0.1 + 0.2 !== 0.3),我需要它来表示银行/金融应用程序中的确切值.请参阅JavaScript的状态和未来,以获得良好的读取和JavaScript背后的脏细节以及它(缺乏)对十进制算术的支持.

"十进制",我的意思是:

  1. 无限范围和任意精度(如BigDecimal在Java中),或
  2. 有限的范围和精度,但适用于财务计算(如decimal在C#中).

那么,使用十进制值的库或解决方案是什么?谢谢!

Dan*_*llo 13

通常建议1处理货币作为整数表示分数:2572美分而不是25.72美元.这是为了避免您提到的浮点运算问题.幸运的是,浮点中的整数运算是精确的,因此可以通过缩放来避免十进制表示错误.


1 Douglas Crockford:JavaScript:好的部分:附录A - 可怕的部分(第105页).


Raz*_*orm 5

Javascript确实有浮点支持.但无论如何,对于财务记录,最简单的实现只是将您的值存储在标准整数中.您可以声明一个整数来表示以美分为单位的金额,或者两个整数来表示一个美元和一个美分.

所以18.57美元在第一种技术中将成为1857cents,在第二种技术中将成为18美元和57美分.

这具有完全准确的附加优点,因为整数纯粹作为唯一二进制表示存储,不存在舍入错误.

  • 像我的例子一样将它存储为整数不是更简单吗?由于架构如何表示浮点,所有十进制实现都会产生固有的不准确性.不要担心溢出,即使是美国国债也会整齐地适应64英寸长线. (2认同)
  • JavaScript浮点的整数部分小于64位. (2认同)