`

js关于小数点失精算法修正0.07*100竟然=7.000000000000001

    博客分类:
  • js
阅读更多
// 关于js失精算法你都遇到哪些,让我们一起来细数一下吧
console.log(0.07*100); // 7.000000000000001


console.log(0.1+0.2); // 0.30000000000000004


// ........

 

事实上,0.1 + 0.2 这这样的 0.1000000000000000055511151231257827021181583404541015625 + 0.200000000000000011102230246251565404236316680908203125 = 0.3000000000000000444089209850062616169452667236328125

这也是造成计算失精的主要原因。

 

wiki:https://en.wikipedia.org/wiki/IEEE_floating_point#Basic_formats

 

oracle失精算法专栏:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

 

解决方案:

如果是取整数,我们可以这样:

 

Math.round((0.07*100))

 

需要保留小数的,我们可以这样:

 

parseFloat((0.07*100).toPrecision(12)) // = 7


parseFloat((0.01+0.02).toPrecision(12)) // = 0.03

 

 

更多实例应用扫码体验:

分享到:
评论

相关推荐

    HTML_js_正则表达式

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"> 2.只能输入数字,能输小数点. <input onkeyup=...

    c#编写的计算器

    结果显示区(作者博客左边的文本框)是TextBox控件,并修改其name为txtShow ,按键0~9为Button控件,并将其name分别修改为btn_0、btn_1、btn_2、btn_3、btn_4、btn_5、btn_6、btn_7、btn_8、btn_9;按键【负数】的...

    程序员二进制计算器 v1.36

    027 + 7 = 23 + 7 = 30 (3)十六进制数 以0x或0X开头: 0x10 = 16 -0XabEF * 2 = -44015 * 2 = -88030 2-浮点数表示法 (1)小数点前后的省略表示 3.14 3. = 3.0 .14 = 0.14 (2)用科学计数法表示...

    java写的计算器

    多输几个小数点也只记录一个,和Windows XP 里的计算器(标准型),功能上是一样的。2+3=5,“2+3***”结果为5,不会连乘。“5*6==180”会连乘,2+3*8=40,2+3***8=40,9/0=0不报错。 共360行代码在这里: ...

    总结一些matlab的基本知识.rar

    我们知道, 是一个小数点后无限位的无理数,计算机是无法精确表示的。所以,在MATLAB中, pi只是一个近似值,3.141592653589793,精确到小数点后15位 pi == 3.141592653589793 % ans = 1 2. sin(pi)≠0 因为 ,导致...

    数学表格--常用对数表

    lg2.573:在第1列找25再横行找“7”为4099,修正值“3”为5。所以lg2.573=0.4104。 2、整数部分不是一位非零数字的。用科学记数法表示N×10^n。 lg25730=lg(2.573×10^4)=lg2.573+4=4.4104。 lg0.002573=lg[2.573×...

    javascript来限制文本框的输入类型

    <p> (1): 只能输入数字,不含小数点: <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"> (2): 只能输入数字,含小数点: <p>  &...

    javascript(js)的小数点乘法除法问题.docx

    javascript(js)的小数点乘法除法问题.docx

    使用python实现元旦倒计时

    python实现元旦倒计时 部分代码如下: import datetime import sys import math import time spring = datetime.datetime(2023, 1, 1, 0, 0, 0) # 新的一年的... minute = math.floor(minute) # 去掉小数点,向下取整

    精确硬盘整数分区计算源码

    易语言硬盘分区计算源码,一般计算公式:M=(G-1)*4+1024*G(G=想要的大小,单位GB,M为要设置的大小)。...' 不管小数点后面几位都进1,也就是40963MB,windows就认为是40GB了。' 这个方法NTFS和FAT32通用。@习惯沉默。

    程序员计算器(支持大数)

    1/7=0.14285714285714285714 1+(2)=3 1+(-2)=-1 0xFF+1=256 0xFFFFFFFFFFFFFFFF*0xFFFFFFFFFFFFFFFF=340282366920938463426481119284349108225 -0x123*-0x123=84681 0xFFFFFF+0=16777215 0xFFFFFF*0=00000000 10.569...

    javascript 取小数点后几位几种方法总结

    javascript 取小数点后几位方法总结 Javascript取float型小数点后两位,例22.123456取成22.12,如何做? 1.通过substring截取。 function getnum() { var num = 22.123456; var result = num.substring(0,s.indexOf...

    js取小数点后两位四种方法

    Javascript取float型小数点后两位,例22.123456取成22.12,如何做? 1.通过substring截取。 function getnum() { var num = 22.123456; var result = num.substring(0,s.indexOf(".")+3); alert(result); } ...

    小学五年级数学小数点乘除法计算练习题合集48502.doc

    小学五年级数学小数点乘除法计算练习题合集48502.doc

    硬盘整数分区计算器.7z

    硬盘整数分区计算器 保证获得整数分区 帮你分区时计算输入的大小 支持ntfs及fat32 使用方法 1、对于FAT32分区,每1024字节可用容量会使用4...不管小数点后面几位都进1,也就是10245MB,这样系统才能认成是10.0GB了

    。NET经典技术

     7.修改转向 <%# "<A href="editpushpro.aspx?id=">"+"修改"+"</A>"%>  8.弹出确定按钮 <%# "<A id="btnDelete" href="pushproduct.aspx?dl=">"+"删除"+"</A>"%>  9.输出数据格式化 "{0:F2}" 是格式 F2表示小数点...

    c#编程—计算器

    本资源是用C#进行编程,实现计算其功能 //小数点点击事件 btn_dot.Click += (s, e) => { SetNum("."); btn_dot.Enabled = false; }; //C按钮点击事件 btn_c.Click += (s, e) => { ... }

    有理分数的四则算术运算符重载 .cpp

    (考虑提供格式化功能,类的用户能够指定小数点右侧的精度位数。) 【Sample output 1】 Enter numerator 1: 12 Enter denominator 1: 3 Enter numerator 2: 5 Enter denominator 2: 14 Enter precision: 3 a=4...

    js控制文本框只输入数字和小数点的方法

    本文实例讲述了js控制文本框只输入数字和小数点的方法。分享给大家供大家参考。具体实现方法如下: 代码如下:function clearNoNum(obj) {  obj.value = obj.value.replace(/[^\d.]/g, “”);//清除“数字”和“.”...

Global site tag (gtag.js) - Google Analytics