js小数计算小数点后显示多位小数的实现方法


Posted in Javascript onMay 30, 2016

首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开]

改写displaynum()函数

function displaynum(){var num = 22.77;alert(num + 10);}

点击Show按钮 结果显示32.769999999996 出现了N多小数.

也并不是所有数字都会出现这种现象, 除了 22.99  2.777 , 好像这几个数字也没什么特殊.

查了一些资料, 一是JS浮点数计算的bug, 另一个是和计算机最终转换成二进制计算有关系, 但是为什么不是所有小数都会有这种现象, 目前我也不清楚, 有时间再去深入研究一下。

现在有两种解决方法, 第一种就是利用JS .toFixed(n) 方法, 直接获取n位小数, 个人觉得这种方法在数据精度上会有一些问题. 如果数据精度要求不高的话 可以使用. 第二种方法就是自己写js 运算方法.

以下是自定义加法函数, 使用此方法进行相加会避免上面问题。

function addNum(num1,num2){var sq1,sq2,m;try{sq1=num1.toString().split(".")[1].length;} catch(e){sq1=0;}try{sq2=num2.toString().split(".")[1].length;} catch(e){sq2=0;}m=Math.pow(10,Math.max(sq1,sq2));return ( num1 * m + num2 * m ) / m;}

当然简单一点也可以写成 alert((num * 3 + 10 * 3) /3); 这样也不会出现n多小数。

alert((num * 3 + 10 * 3) /3); 与 alert(num + 10); 这两种写法计算机在底层转换成二进制运算是有区别的, 或许这就是出现上述问题的原因

以上这篇js小数计算小数点后显示多位小数的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
深入理解javascript中defer的作用
Dec 11 Javascript
js出生日期 年月日级联菜单示例代码
Jan 10 Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
Jan 14 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
May 30 Javascript
Angular页面间切换及传值的4种方法
Nov 04 Javascript
基于BootStrap的前端分页带省略号和上下页效果
May 18 Javascript
javascript按钮禁用和启用的效果实例代码
Oct 29 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
Apr 13 Javascript
Node配合WebSocket做多文件下载以及进度回传
Nov 07 Javascript
JS 4个超级实用的小技巧 提升开发效率
Oct 05 Javascript
拥Bootstrap入怀——导航栏篇
May 30 #Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 #Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
May 30 #Javascript
Bootstrap编写导航栏和登陆框
May 30 #Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
May 30 #Javascript
Bootstrap+jfinal实现省市级联下拉菜单
May 30 #Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 #Javascript
You might like
javascript div 弹出可拖动窗口
2009/02/26 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
Python中的yield浅析
2014/06/16 Python
python 中split 和 strip的实例详解
2017/07/12 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
浅谈Python爬虫基本套路
2019/03/25 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
python判断自身是否正在运行的方法
2019/08/08 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
软件测试工程师面试问题精选
2016/10/28 面试题
海南地接欢迎词
2014/01/14 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
小学生元旦感言
2014/02/26 职场文书
蜗居观后感
2015/06/11 职场文书
网吧管理制度范本
2015/08/05 职场文书
教师节感想
2015/08/11 职场文书