乘以两个不同的值

Multiiplication in two different Values

本文关键字:两个      更新时间:2023-09-26

我在JavaScript的工作场景中使用了以下代码片段。

var t = 0.000029411764705882354 * 34000;

T 的结果是 1 。 我想得到精确的乘法结果而不是 1 作为

0.9999999999972.

首先,计算结果不是 1。表达式:

29411764705882354 * 34

(去掉乘以十的幂)实际上给你:

1000000000000000036

最重要的是,除非您具有无限的存储能力,否则没有编码方案可以表示每个数字。你需要习惯这样一个事实,即浮点数通常是你要求的近似值 - 有些数字可以准确地表示,但在所有实数的域中,它们形成了一个消失的小部分:-)

话虽如此,有几种方法可以解决它。

首先,您可以使用 bignum 类型的库(例如 C 中的 MPIR)为您提供任意(不是无限)精度算术。除了非理性之外,这将处理大多数情况。

其次,您可以继续使用浮点数,但请注意它不精确,您可能需要打印出四舍五入的数字。例如,0.9999999999972四舍五入到 <=11 个十进制(不重要)数字,则得到 1