可能重复:
JavaScript的数学是否被破坏?
这看起来真的很愚蠢,但在运行时,它会显示出来
7.300000000000001而不是7.3
Run Code Online (Sandbox Code Playgroud)<script language="javascript"> function buttonClicked() { var mySum = 1.1 + 1.1 + 1.1 + 0 + 4; alert(mySum); } </script>
什么会导致这个?我在一个非常基本的aspx页面上有javascript.我们实际上是使用javascript从表单输入中添加值,这只是一个打破它的数字的例子,还有很多其他的..
知道什么可以这样做吗?!?
它与十进制值如何转换为二进制浮点数有关.1/10变成二进制的重复小数,因此数字没有完美表示,重复操作可以暴露错误.
JavaScript使用IEEE-754浮点数作为记录.其他一些语言也有同样的问题.
怎么处理呢?在你的情况下,也许toPrecision().
浮点数存储为数字部分(尾数)和指数(小数点移动多少位)。浮动点数的尾数部分存储为分数之和。它们是通过添加一系列分数来计算的。分数的顺序是:
1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128, ... etc
Run Code Online (Sandbox Code Playgroud)
二进制表示形式存储为 0 和 1,表示是/否。例如,001010 将是 0 * 1/2 + 0 * 1/4 + 1 * 1/8 + 0 * 1/16 + 1 * 1/32。
这是为什么浮点不能精确的一个粗略例子。当你增加精度(float -> double -> long double)时,你会得到更高的精度。
存储的底层二进制数据被分为两部分 - 一个是出现在小数点之前的部分,另一个是小数点之后的部分。它是一项IEEE 标准,因其计算执行速度(可能还有其他因素)而被采用。
检查此链接以获取更多信息: https://en.wikibooks.org/wiki/A-level_Computing/AQA/Paper_2/Fundamentals_of_data_representation/Floating_point_numbers
| 归档时间: |
|
| 查看次数: |
13116 次 |
| 最近记录: |