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. (原)Eclipse中将JNI生成的so打包成jar的步骤

    说明:新人,对java不熟,见谅. 1. 新建工程,添加好native support,写好对应的文件(包括cpp文件,so文件和对应的java文件,此处称对应的java文件为SoJAR.java,) ...

  2. C# 操作系统回收站

    主要目的:对系统回收站的文件进行操作. 首先添加引用,引入shell32.dll. /// <summary> /// 对回收站的文件进行还原.删除.剪切等操作 /// </summ ...

  3. Android动态加载代码技术

    Android动态加载代码技术 在开发Android App的过程当中,可能希望实现插件式软件架构,将一部分代码以另外一个APK的形式单独发布,而在主程序中加载并执行这个APK中的代码. 实现这个任务 ...

  4. Eclipse 安装使用 Maven

    安装 Maven 下载 Maven  http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9 ...

  5. C# 文件/文件夹压缩

    一.ZipFile ZipFile类用于选择文件或文件夹进行压缩生成压缩包. 常用属性: 属性 说明 Count 文件数目(注意是在ComitUpdat之后才有) Password 压缩包密码 Siz ...

  6. LeeCode-Remove Duplicates from Sorted List

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  7. python多线程同步

    python多线程同步 作者:vpoet 日期:大约在夏季 import threading import time mylock = threading.RLock() num=0 class my ...

  8. [Ruby学习总结]Ruby中的类

    1.类名的定义以大写字母开头,单词首字母大写,不用"_"分隔 2.实例化对象的时候调用new方法,实际上调用的是类里边的initialize方法,是ruby类的初始化方法,功能等同 ...

  9. GDB+GDBServer调试Linux应用程序

    参考:http://blog.csdn.net/shanghaiqianlun/article/details/7820401 一.gdb+gdbserver总体介绍 远程调试环境由宿主机GDB和目标 ...

  10. 总结一下用caffe跑图片数据的研究流程

    近期在用caffe玩一些数据集,这些数据集是从淘宝爬下来的图片.主要是想研究一下对女性衣服的分类. 以下是一些详细的操作流程,这里总结一下. 1 爬取数据.写爬虫从淘宝爬取自己须要的数据. 2 数据预 ...