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. 层层递进Struts1(六)自定义转换器

    Struts提供的类型转换有限,如果我们强行使用没有的类型转换,则会出现错误,以Date类型为例: org.apache.catalina.core.StandardWrapperValve invo ...

  2. Direct2D 几何图形绘制基础

    之前说过,D2D主要为了绘制有三种类型的数据:几何图形,图片,文字.这几种对象也叫做资源,资源就是要D2D流水线中要被加工的对象. 几何图形包括: 简单几何图形 直线,DrawLine,由起点和终点构 ...

  3. (转)set集合的应用

    set集合的应用 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), diffe ...

  4. linux下tar用法

    以下是linux下tar的用法,转一下,以便方便自己看(这里没把rar,zip类的转过来,一般rar,zip在linux下基本没人用,基本上是zip,unzip,rar,unrar,这些命令,并且ra ...

  5. html 标签释义

    position  位置  给....定位   作用:定位 position:fixed  锁定游览器位置 如右下角弹窗 absolute  绝对定位    游览器左上角      position: ...

  6. 利用raspberry pi搭建typecho笔记(二) sqlite和typecho部署

    sqlite概述 typecho可以支持MYSQL和Sqlite两种数据库,因为Sqlite更为轻量,并且不需要额外的进程,而是直接对数据库文件进行读取,所以配置相对于MySQL也更为简单,仅需指定数 ...

  7. RHEL 7.0 修改防火墙配置

    RHEL 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 关闭firewall: systemctl stop firewalld.service #停止firewal ...

  8. EXT JS 4.3 在线学习

    官网地址:http://docs.sencha.com/extjs/4.1.3/ 相关示例:http://docs.sencha.com/extjs/4.1.3/#!/example Examples ...

  9. 【剑指offer】面试题23:从上往下打印二叉树

    题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: bfs,队列. 注意,队列最后不要忘了pop(). 代码: /* struct TreeNode { int val; stru ...

  10. Linux MySql安装步骤

    本文将以MySQL 5.5.47为例,以CentOS 6.5为平台,讲述MySQL数据库的安装和设置. 源码包方式安装 1.新建MySql用户和用户组 groupadd mysql useradd - ...