0

i have use the following code snippet in my working scenorio of JavaScript.

var t = 0.000029411764705882354 * 34000;

the result of t is 1 . i want to get the exact multiplication result instead of 1 as

0.9999999999972.

4

1 回答 1

2

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

29411764705882354 * 34

(去掉十次方的乘法)实际上给了你:

1000000000000000036

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

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

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

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

于 2013-11-06T04:50:21.513 回答