我正在运行以下javascript代码:
var var1 = 0.53;
var var2 = 0.47;
alert(var1-var2);
此代码返回:
0.06000000000000005
但是如果我执行这个javascript代码:
var var1 = 0.14;
var var2 = 100;
alert(var1*var2);
回报是:
14.0600000000000002
用什么文件来解释这个?
谢谢!
答案 0 :(得分:2)
这是一个非常基本的问题,与浮点数的表示方式有关(详细说明请参见wikipedia article)。它不是特定于javascript。
由于计算机仅对二进制值起作用,因此无法准确表示某些分数。示例:可以精确表示1/2或3/4。另一方面,1/3不能(像在十进制系统中)。一个看似“简单”的数字如0.14导致舍入误差是违反规范的,然而,当你认为它为7/50 = 7 /(5 * 5 * 2)时,它变得清晰。问题是五个人。 1/5 = 0.2在十进制系统中很好,但不是二进制数。
<强>更新强>
我并不是说完全不可能进行这类计算。但是,您必须为此目的使用某些库(例如,使用货币值)