1.之前在度娘那找了一下关于javascript中可处理的浮点数的最高精度的问题,但找了好久也找不到,于是自己 小小的研究了一下,之前以为是17,后来测到18,再后来又测到19,经过一系列的改写,得到下面的相对完善的检测方案:

<script>
//返回数字数组中的最大值
function arrMax(arr)
{
return Math.max.apply({}, arr);
}
//10万个随机小数中的最大精度
function maxDec()
{
var arr = [];
var dec = 0;
var len = 0;
var num = 0; //取得10万个随机小数的小数位精度,如果直接100万个会报错,浏览器不给循环这么多次,所以就来个10万次
for(var i=0; i<100000; i++)
{
dec = Math.random(); //随机小数
len = dec.toString().split('.')[1].length; //获取上面得到的随机小数的小数位长度
arr.push(len); //用数组把这个长度存起来
}
//返回这10万个中最大的
return arrMax(arr);
} //上面的10万个有点少,再来个100循环,就是1千万了
var temp = [];
for(var i=0; i<100; i++)
{
temp.push(maxDec())
}
alert(arrMax(temp)) //多执行几次,最大的不超过22,所以JS可以处理的小数最高精度为22 位;如果您测到比22大的,一定要告诉下我啊~~~ </script>

//上面有bug,不正确,大家还是忽略上面的结论,看下面的吧....

2.小数的小特性

先问大家几个问题:1 * 0.1等于多少呢?    2*0.1等于多少呢?  那3*0.1等于多少呢?  (此时此刻你是不是想说:坑爹的,你坑我啊!)哈哈,请耐心看下下面的代码:

<script>
for(var i=1; i<=10; i++)
{
var res = i * 0.1;
console.log(i + '*0.1= ' + res);
} /* 1*0.1= 0.1
2*0.1= 0.2
3*0.1= 0.30000000000000004
4*0.1= 0.4
5*0.1= 0.5
6*0.1= 0.6000000000000001
7*0.1= 0.7000000000000001
8*0.1= 0.8
9*0.1= 0.9
10*0.1= 1 */
</script>

你是否惊讶的发现, 3*0.1 竟然是等于0.30000000000000004, 坑啊!!!

揭秘: 其实,不紧紧是JS, 所有的计算设备都有这样的问题, 因为 根本不存在完全精确的小数,  10/3 =0.33333333333333.....  程序根本存不了这么多小数, 而是有范围的, 这些小数都是模拟出来的, 银行中的程序不是以元为单位的,你看到的100.23元,

在他的程序后面其实是10023分;

所以,尽量避免小数的出现,如果出现的话,想办法转成整数处理。以后会研究研究怎样尽可能小的减少精度损失。

欢迎拍砖,觉得好的请点下推荐~~(之前有些笔误,现在改好了)

javascript中可处理的浮点数的最高精度(和小数的一些小特性)的更多相关文章

  1. 如何解决JavaScript中0.1+0.2不等于0.3

    console.log(0.1+0.2===0.3)// true or false?? 在正常的数学逻辑思维中,0.1+0.2=0.3这个逻辑是正确的,但是在JavaScript中0.1+0.2!= ...

  2. JavaScript中的 NaN 与 isNaN

    NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...

  3. JavaScript 中的 NaN 和 isNaN

    1.NaN NaN 即 Not a Number , 不是一个数字.那么 NaN 到底是什么呢? 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型 ...

  4. 前端学习之JavaScript中的 NaN 与 isNaN

    NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...

  5. 【javascript】javascript中function(){},function(){}(),new function(){},new Function()

    和java比起来,javascript真的是松散的无以复加,不过这也让我们在无聊之余,有精力去探讨一些复杂的应用,从而在开发之路上,获得一些新的想法. javascript中的类的构造 javascr ...

  6. javascript 中function(){},new function(),new Function(),Function 摘录

    函数是JavaScript中很重要的一个语言元素,并且提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系. function使用方式 var foo01 = ...

  7. javascript 中function(){}(),new function(),new Function(),Function

    和java比起来,javascript真的是松散的无以复加,不过这也让我们在无聊之余,有精力去探讨一些复杂的应用,从而在开发之路上,获得一些新的想法. javascript中的类的构造 javascr ...

  8. JavaScript 中JSON

    JSON是JavaScript Object Notation的缩写,它是一种数据交换格式. 在JSON出现之前,大家一直用XML来传递数据.因为XML是一种纯文本格式,所以它适合在网络上交换数据.X ...

  9. javascript中的浮点数运算

    解释一下下面代码的输出 console.log(0.1 + 0.2); //0.30000000000000004 console.log(0.1 + 0.2 == 0.3); //false Jav ...

随机推荐

  1. tp中u方法的使用

    自学的时候都没怎么使用过该方法,现在刚进入一个新公司参加项目.发现这个方法用的很多,所以记录下来防止以后忘了. U方法用于完成对URL地址的组装,特点在于可以自动根据当前的URL模式和设置生成对应的U ...

  2. Tempter of the Bone(dfs+奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  3. StringBuilder是不是线程安全的?

    测试条件: 开启2个并行执行任务,往同一个StringBuilder对象写入值 测试代码: ; static StringBuilder sbIsThreadSafe = new StringBuil ...

  4. psutil官方文档

    psutil documentation¶ Quick links Home page Install Blog Forum Download Development guide What’s new ...

  5. AlarmReceiver 与IntentService的使用

    1:GetSmsService.java public class GetSmsService extends IntentService{ private AlarmManager alarmMan ...

  6. SQL Server 2005中的分区表(五):添加一个分区

    所谓天下大事,分久必合,合久必分,对于分区表而言也一样.前面我们介绍过如何删除(合并)分区表中的一个分区,下面我们介绍一下如何为分区表添加一个分区. 为分区表添加一个分区,这种情况是时常会 发生的.比 ...

  7. SqlServer IF Exists([database]|[table]|[prop]) / Column([Operation])

    *************************** --判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER..sysdatabases WHERE NAME = ' ...

  8. IA32与x86

    64位机器相比于32位优点 ①访问虚拟地址范围更大 ②更多的寄存器 ③过程较简单 ④采用条件传送指令 详细看:http://baike.baidu.com/link?url=DoRp7iW_z3cE6 ...

  9. hdu1556 Color the ball

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  10. find -exec

    find -exec 的标准写法 find ./ -name "*.tmp" -exec rm -rf "{}" \; find -exec 这个命令组合很好用 ...