解决JS浮点数(小数) 运算出现Bug的方法
例如37.2 * 5.5 = 206.08 就直接用JS算了一个结果为: 204.60000000000002 怎么会这样, 两个只有一位小数的数字相乘, 怎么可能多出这么小数点出来。 后来查了下,发现原来这是JavaScript浮点运算的一个bug。

方法 / 步骤
比如: 7 * 0.8 JavaScript算出来就是: 5.6000000000000005 网上找到了一些解决办法, 就是重新写了一些浮点运算的函数或直接扩大倍数运算。 下面就把这些方法摘录下来, 以供遇到同样问题的朋友参考:
在你要用的地方包含这些函数, 然后调用它来计算就可以了。 / 如果在知道小数位个数的前提下, 可以考虑通过将浮点数放大倍数到整型(最后再除以相应倍数), 再进行运算操作, 这样就能得到正确的结果了

<!DOCTYPE html>
<html><head><title>浮点数运算</title><meta charset="utf-8"><meta http-equiv="Pragma" content="no-cache"><meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
</head>
<body>
<script>
/* 解决JS浮点数(小数) 运算出现Bug的方法
37.2 * 5.5 = 206.08 就直接用JS算了一个结果为: 204.60000000000002 怎么会这样, 两个只有一位小数的数字相乘, 怎么可能多出这么小数点出来。 后来查了下,发现原来这是JavaScript浮点运算的一个bug。方法 / 步骤
比如: 7 * 0.8 JavaScript算出来就是: 5.6000000000000005 网上找到了一些解决办法, 就是重新写了一些浮点运算的函数或直接扩大倍数运算。 下面就把这些方法摘录下来, 以供遇到同样问题的朋友参考:*/
/* 在你要用的地方包含这些函数, 然后调用它来计算就可以了。 / 如果在知道小数位个数的前提下, 可以考虑通过将浮点数放大倍数到整型(最后再除以相应倍数), 再进行运算操作, 这样就能得到正确的结果了*/
var jjxx={/*加法函数,返回值:arg1加上arg2的精确结果*/numAdd:function(arg1, arg2){var r1, r2, m;try {r1 = arg1.toString().split(".")[1].length} catch (e) {r1 = 0}try {r2 = arg2.toString().split(".")[1].length} catch (e) {r2 = 0}m = Math.pow(10, Math.max(r1, r2))return (arg1 * m + arg2 * m) / m},/*减法函数, 返回值:arg1减去arg2的精确结果*/numSubtract:function(arg1, arg2) {var r1, r2, m, n;try {r1 = arg1.toString().split(".")[1].length} catch (e) {r1 = 0}try {r2 = arg2.toString().split(".")[1].length} catch (e) {r2 = 0}m = Math.pow(10, Math.max(r1, r2));//动态控制精度长度n = (r1 >= r2) ? r1 : r2;return ((arg1 * m - arg2 * m) / m).toFixed(n);},/*乘法函数 返回值:arg1乘以arg2的精确结果*/numMultiply:function(arg1, arg2) {var m = 0,s1 = arg1.toString(),s2 = arg2.toString();try {m += s1.split(".")[1].length} catch (e) {}try {m += s2.split(".")[1].length} catch (e) {}return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)},/*除法函数, 返回值:arg1除以arg2的精确结果*/numDivide:function(arg1, arg2){var t1 = 0,t2 = 0,r1, r2;try {t1 = arg1.toString().split(".")[1].length} catch (e) {}try {t2 = arg2.toString().split(".")[1].length} catch (e) {}with(Math) {r1 = Number(arg1.toString().replace(".", ""))r2 = Number(arg2.toString().replace(".", ""))return (r1 / r2) * pow(10, t2 - t1);}}
}
</script>
</body>
<script>alert(7 * 0.8)alert(jjxx.numMultiply(7,0.8))
</script>
</html>

转载于:https://www.cnblogs.com/wangmaoling/p/8039951.html

解决JavaScript浮点数(小数) 运算出现Bug的方法相关推荐

  1. java浮点数化为整数_[Java教程]javascript浮点数转换成整数三种方法

    [Java教程]javascript浮点数转换成整数三种方法 0 2014-06-24 04:00:27 将浮点数转换成整数方法有很多,分享三种常用方法. Summary 暂时我就想到3个方法而已.如 ...

  2. 解决JS浮点数(小数)计算加减乘除的BUG

    2019独角兽企业重金招聘Python工程师标准>>> //浮点数减法运算function FloatSub(arg1,arg2){var r1,r2,m,n;try{r1=arg1 ...

  3. php 精度问题怎么解决,JavaScript 中精度问题以及解决方案

    JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示.其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在 ES5 规范 中指出了指数位E ...

  4. js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;

    原博1 原博2 方案1和方案2都是有效的 情景: 在计算浮点数时候,出现多余小数. 例如: 1.11 + 1 = 2.1100000000000003 为什么计算小数会出现误差? 浮点数值的最高进度是 ...

  5. 【Python】解决浮点数间运算存在不确定尾数的问题

    #浮点数间运算存在不确定尾数,所以会输出False if 0.1+0.2==0.3:print("Ture\n") else:print("False\n") ...

  6. c语言浮点数如何精确计算,浮点数精确运算的分析和解决办法

    1.01 + 2.01 = 3.02 2.01 * 2.01 = 4 0401   不知你注意没有,这个很寻常的等式,你如果将它放在C++中,Java中,Basic中,它 居然是不成立的.计算机在开玩 ...

  7. JS--使用第三方库解决浮点数(小数)计算不准确的问题

    原文网址:JS--使用第三方库解决浮点数(小数)计算不准确的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决JavaScript在计算浮点数(小数)时不准确(精度丢失)的问题. 问题描述 ...

  8. 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)

    不知道大家在使用JS的过程中有没有发现某些浮点数运算的时候,得到的结果存在精度问题:比如0.1 + 0.2 = 0.30000000000000004以及7 * 0.8 = 5.60000000000 ...

  9. js小数运算出现多为小数问题_JS操作小数运算,结果莫名其妙出现多位小数问题...

    Number类型: Number类型是ECMAScript中最常用和最令人关注的类型了:这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被成为双精度数值),为支持各种数据类型 ...

  10. js 单精度浮点数转10进制_确保前端 JavaScript 浮点数精度的四则运算方法

    1 浮点数运算与 IEEE 754 标准 在 JavaScript 中,执行 0.1+0.2,得到的结果却是 0.30000000000000004.这就不得不提到 IEEE 754 标准. IEEE ...

最新文章

  1. forms oracle runtime_FRM-92101:forms Server在启动过程中失败
  2. python控制台输出颜色
  3. fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”?
  4. 【Python基础教程】for循环用法详解
  5. 2020-9-16晚上导师问我Spartacus的学习进度,我的回答
  6. Python列表、元组
  7. 省选+NOI 第六部分 技巧与思想
  8. 社区论坛小程序带订阅功能
  9. windows 安装 mysql5.7.17
  10. 打造自己的 nodejs 静态文件服务器(帖子内容,直接复制别人的)
  11. 我 yii2 (一)
  12. 管理新语:软件工作考评的设计思路
  13. json-server安装报错问题
  14. PHP CI框架+VUE开发环境搭建,tnpm搭建VUE环境
  15. python打印图像所有的像素值
  16. 一份spyglass做lint的lint.prj
  17. 适合于图像处理方向的SCI期刊杂志列表
  18. 判断日期数组是否连续
  19. 安防大数据时代,IP摄像机的发展历程
  20. 什么是私有云、公有云、混合云?什么是云计算管理平台?

热门文章

  1. java 遍历文件夹 性能_Java函数式编程(十一):遍历目录
  2. 2021-10-25双塔模型
  3. Optional Interview with Benny the Irish Polyglot abo---coursera课程Learn how to learn
  4. 利用反射给属性赋值,调用方法,调用构造器--getDeclaredField,getDeclaredMethod,getDeclardConstructor
  5. mysql join explain_详解 MySQL 中的 explain
  6. URDGN:Ultra-resolve Face Images by Discriminative Generative Networks
  7. 2019年 AI 顶会速递
  8. Beautiful Soup 4.2.0 文档
  9. unity 入门学习之(二)脚本学习
  10. java 不变类_Immutable-不变模式与不变类-一版