Javascript浮点数乘积运算出现多位小数的解决方法
Javascript在进行浮点数的乘积运算,会出现多位小数的情况。
这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数在二进制编码后出现无限循环,因而导致计算出现了误差,在其它变成语言中也有类似的问题。
原因解释参考自百度知道:
例如:求1038.1-1000
1038.1=10000001110.0001100110011001100110011001100110011001100.....
1000 =1111101000
1038.1转化为二进制是个无限循环小数,1100是循环节,只能取近似值,误差就是这里产生的 如果浏览器版本高,可以用toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
解决方案:根据要保留的小数位数(如4),在计算乘积的时候先乘以(10^4),然后对计算结果除以(10^4),最后对结果取近似值Math.round
代码如下:
var m1 = 2232.00,
percent = (10/100),
total = percent*m1;
alert(total);//223.20000000000002
total = Math.round(total*10)/10;
alert(total);//223.2
相关推荐
-
Javascript中浮点数相乘的一个解决方法
Javascript中的浮点数相乘是个很有意思的事情. 浮点数相乘有很多方式,下面是我给出的一个我自己认为不错的解决方案: 复制代码 代码如下: function FxF(f1, f2) { f1 += ''; f2 += ''; var f1Len = f1.split('.')[1].length, f2Len = f2.split('.')[1].length; if (f1Len) { f1 = f1.replace('.', '');
-
js浮点数精确计算(加、减、乘、除)
复制代码 代码如下: <SPAN style="FONT-SIZE: 18px">//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. //调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function accAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".&
-
javaScript实现浮点数转十六进制字符
最近一个嵌入式项目中需要WEB功能,因此想到利用HTML+JavaScript实现一些参数配置功能,参数由JavaScript生成十六进制数据,通过POST提交给单片机,然后再直接使用,以充分利用浏览器的计算能力. 由于JavaScript对浮点数的支持很弱,直接使用浮点数转十六进制功能,双不能实现平常在C语言中实现的4字节的存储表示法,通过搜索,并没有找到相关功能代码,在Node.js的Buffer类可以实现此功能,但又没办法使用(单片机存储空间有限),也没办法找到具体是如何实现的(看不太懂)
-
JavaScript浮点数及运算精度调整详解
JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的. 十进制 二进制 0.1 0.0001 1001 1001 1001 - 0.2 0.0011 0011 0011 0011 - 0.3 0.0100 1100 1100 1100 - 0.4
-
javascript将浮点数转换成整数的三个方法
Summary 暂时我就想到3个方法而已.如果读者想到其他好用方法,也可以交流一下 parseInt 位运算符 Math.floor Math.ceil Description 一.parseInt 1. 实例 parseInt("13nash");//13 parseInt("")// NaN parseInt("0xA") //10(十六进制) parseInt(" 13")//13 parseInt("070&
-
JavaScript 浮点数运算 精度问题
Js代码 复制代码 代码如下: <script type="text/javascript" language="javascript"> alert(1/3);//弹出: 0.3333333333333333 alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999 alert(-0.09999999 - 0.00000001);//弹出: -0.09999999999999999 alert(0
-
Javascript浮点数乘积运算出现多位小数的解决方法
Javascript在进行浮点数的乘积运算,会出现多位小数的情况. 这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数在二进制编码后出现无限循环,因而导致计算出现了误差,在其它变成语言中也有类似的问题. 原因解释参考自百度知道: 例如:求1038.1-1000 1038.1=10000001110.0001100110011001100110011001100110011001100..... 1000 =1111101000 1038.1转化为二进制是个无限循环小数,1100是
-
js小数运算出现多位小数如何解决
和大家分享一个有趣的测试: 0.1+0.2 == 0.3 //false 顿时郁闷,好吧!原来0.1+0.2变成:0.30000000000000004 再来一个 2.4/0.8 =>2.9999999999999996 没办法换种方式,都转换成整数 (2.4 * 100)/(0.8 * 100) 10.22 现在要减去 0.11 结果值又出现了很多的小数 10.110000000000001,然后我就用了 toFixed 方法来过滤小数,但是不知道跟前面那种转换成整数后再执行哪种效率高,好!还
-
javascript实现保留两位小数的多种方法
第一种方法:javascript实现保留两位小数一位自动补零代码实例: 第一种方法介绍一下如何实现对数字保留两位小数效果,如果数字的原本小数位数不到两位,那么缺少的就自动补零,这个也是为了统一的效果,先看代码实例: function returnFloat(value){ var value=Math.round(parseFloat(value)*100)/100; var xsd=value.toString().split("."); if(xsd.length==1){ val
-
go浮点数转字符串保留小数点后N位的完美解决方法
最近在项目中碰到很多次float转string,同时要求保留小数点后几位,并且去掉小数点后0的场景 虽然问题很简单,但是隔了挺久没处理这种场景就有些生疏了,自己也搜了一下,很多回答都不太满意.这里贴一下自己的做法,如果有更好的解决办法的话,还请多多指教 // 主要逻辑就是先乘,trunc之后再除回去,就达到了保留N位小数的效果 func FormatFloat(num float64, decimal int) string { // 默认乘1 d := float64(1) if decima
-
js小数计算小数点后显示多位小数的实现方法
首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开] 改写displaynum()函数 function displaynum(){var num = 22.77;alert(num + 10);} 点击Show按钮 结果显示32.769999999996 出现了N多小数. 也并不是所有数字都会出现这种现象, 除了 22.99 2.777 , 好像这几个数字也没什么特殊. 查了一些资料, 一是JS浮点数计算的bug, 另一个是和计算机最终转换成二进制计算有关系, 但是为什么不是
-
Java保留两位小数的实现方法
Java保留两位小数的实现方法 采用四舍五入的方式 : 该方式来自网络 import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class format { double f = 111231.5585; public void m1() { BigDecimal bg = new BigDecimal(f); double f1 = bg.setSca
-
python格式化输出保留2位小数的实现方法
我是小白就不用多说了,学习python做了个练习题,结果运行了一遍,发现输入金额后得到的有很多位小数, 虽然不知道为什么,但是看得很不舒服, 就想到应该把让小数点后只保留2位数 找到了方法:将{0}改为{:.2f} # 一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间, # 会给10%的折扣,如果购买金额大于100元会给20%折扣.编写一程序, # 询问购买价格,再显示出折扣(%10或20%)和最终价格 sum_money = float(input('请输入购买总金额
-
关于JavaScript实现动画时动画抖动的原因与解决方法
目录 使用定时器实现动画出现卡顿的原因 requestAnimationFrame 的前世今生 requestAnimationFrame VS setInterval 参考资料 总结 前段时间在使用 JavaScript 做动画的时候发现做出来的动画会出现卡顿的现象,今天我们主要就来聊一下卡顿的原因以及如何解决这个问题. 使用定时器实现动画出现卡顿的原因 主要原因是浏览器无法确定定时器的回调函数的执行时机.以 setInterval 为例,当一个 setInterval 定时器被创建后,它的回
-
javascript保留两位小数的实现方法你了解吗
目录 1.四舍五入:tofixed 2.不四舍五入 总结 1.四舍五入:tofixed 实例 : 把数字转换为字符串,结果的小数点后有指定位数的数字 var num =2.446242342; num = num.toFixed(2); // 输出结果为 2.45 例子: :(Number(turnover)/100000000).toFixed(1);//单位为亿元时,就除已1亿,如果单位为万元时就除以1万,tofixed括号里1表示保留一位小数,并且四舍五入:(Number(turnover
随机推荐
- VUE2实现事件驱动弹窗示例
- webpack2.0配置postcss-loader的方法
- Bootstrap每天必学之表单
- 我教你学之注册表清理
- JAVA 时间区间的字符串合法性验证
- IE bug table元素的innerHTML
- BootStrap实现邮件列表的分页和模态框添加邮件的功能
- PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
- Asp定时执行操作 Asp定时读取数据库(网页定时操作详解)
- 读取图片像素的具体实例
- 百度判断手机终端并自动跳转js代码及使用实例
- js实现table添加行tr、删除行tr、清空行tr的简单实例
- CCNA笔记Router
- Jquery EasyUI Datagrid右键菜单实现方法
- JavaScript中继承的一些示例方法与属性参考
- windows 10 安装和使用中5个常见问题
- Java实现FTP文件与文件夹的上传和下载
- Spring boot 默认静态资源路径与手动配置访问路径的方法
- java初学者必须理解这几个问题
- Android实现Service下载文件,Notification显示下载进度的示例