js小数运算出现多为小数问题_JS操作小数运算,结果莫名其妙出现多位小数问题...
Number类型:
Number类型是ECMAScript中最常用和最令人关注的类型了;这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被成为双精度数值),为支持各种数据类型,ECMA-262定义了不同的数值面量格式。
十进制:
var intNum=10; //整数
八进制:
var octalNum1=070; //八进制的56
var octalNum2=079; //无效的八进制数值-解析为79
八进制字面量在严格模式下是无效的;
十六进制:
var hexNum1=0xA; //10
切记:在进行运算的时候,所有以八进制和十六进制表示的数值都最终被转换成十进制;
为什么操作小数会出现误差?
浮点数值的最高进度是17位小数,但在进行运算的时候其精确度却远远不如整数;整数在进行运算的时候都会转成10进制; 而java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果。然后再将二进制结果换算为十进制,这里通常会出现第二次的误差。
所以(0.1+0.2)!=03
解决方式:
程序代码
除法函数,用来得到精确的除法结果
说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
调用:accDiv(arg1,arg2)
返回值:arg1除以arg2的精确结果
function accDiv(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); }
}
给Number类型增加一个div方法,调用起来更加方便。
Number.prototype.div = function (arg){
return accDiv(this, arg);
}
乘法函数,用来得到精确的乘法结果
说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
调用:accMul(arg1,arg2)
返回值:arg1乘以arg2的精确结果
function accMul(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
)}
View Code
给Number类型增加一个mul方法,调用起来更加方便。
Number.prototype.mul =function (arg){return accMul(arg, this);
}
View Code
加法函数,用来得到精确的加法结果
说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
调用:accAdd(arg1,arg2)
返回值:arg1加上arg2的精确结果
function accAdd(arg1,arg2){varr1,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
}
View Code
给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add =function (arg){return accAdd(arg,this);
}
View Code
在你要用的地方包含这些函数,然后调用它来计算就可以了。
比如你要计算:7*0.8 ,则改成 (7).mul(8)
其它运算类似,就可以得到比较精确的结果。
解决方式二:
比较常用的办法,toFixed(),toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。在我们计算的结果后面加上这个方法就OK了;但是对精度会有一丝影响,如果精度要求不高的话推荐使用;
js小数运算出现多为小数问题_JS操作小数运算,结果莫名其妙出现多位小数问题...相关推荐
- c保留小数点后三位数没有则为0_C语言中……“计算结果保留三位小数。”怎么表示?...
展开全部 printf("%7.3f",100/3.0);表示结果占七位,小数部分占3位,这样就可以了,并且小数点后第e69da5e6ba9062616964757a6869646 ...
- JAVA字符串数学公式运算-辅助类-支持浮点数错误纠正-低消耗-高可用性-小数点后面保留16位小数
//计算辅助类·基础计算 public class ArithHelper {// 默认除法运算精度private static final int DEF_DIV_SCALE = 16;// 这个类 ...
- js 正则 限制 input 只能输入数字,不能输入特殊符号,保留两位小数等效果
限制只能输入数字,小数点只保留2位,限制不能输入空格 <div id="app"><input type="text" v-model=&qu ...
- JS 两数相除取百分比%并保留两位小数
代码如下: //两数相除取百分比%并保留两位小数 function Percentage(number1, number2) { // 小数点后两位百分比return (Math.round(numb ...
- sql两数相除保留两位小数_sql 除法运算 保留两位小数
js限制输入数字能输入小数点,js定义数组,js往数组中添加数据,js将字符型转为数字型,除法结果保留两位小数--js小测:计算比赛得分 一个朋友跟我说要去给某个比赛算分: 规则:去掉最低分最高分求平 ...
- java怎么保留两位小数?具体方法是什么?
很多小伙伴在使用java的时候可能会遇到这样的需求:一个浮点型的数据,我只需要保留两位小数即可.而现实中往往的输出情况却大相径庭.其实这都是数据没有进行格式化的结果,java提供了很多方法来进行数据格 ...
- java 不四舍五入 保留,java保留两位小数(不四舍五入)
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat d ...
- vue 保留三位小数_vue input框type=number 保留两位小数自定义组件
第一步:自定义组件MyNumberInput.vue export default { props: { point: { default: 0 }, max: Number, placeholder ...
- python 保留两位小数 占位_第17p,Python中格式化输出的3种方式
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第17篇文章,第二阶段的课程:Python基础知识:格式化输出的3种方式 学习本课程,建议先看一遍:[计算机基础知识]课程. 格式化 ...
最新文章
- linux加微软的数据库,在Linux上使用Microsoft SQL – 安装SQL
- ubuntu12.4上安装minigui3.0.12
- 7.4.3 矩阵极分解和平方根分解
- 一道3G门户的面试题 (Java)
- 小白零基础怎么学习Java?不要慌
- WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式
- Html中 table,list等表格 中 js 的 Checkbox全选,反选,单选,获取数据选中行 的写法
- HTTPS中间人攻击实践(原理·实践)
- html实现好看的注册页面,html+css做一个好看的可翻转登录注册界面代码实例
- 世界一流学科排名计算机科学,2019上海软科世界一流学科排名计算机科学与工程专业排名哥伦比亚大学排名第22...
- 海豚湾在哪_前任3中的海豚湾在哪里揭晓 热爱海洋之人的梦中圣地
- [C++]<numeric>头文件介绍
- 谁能最后享受到胜利成果?
- PyTorch 学习之Ubuntu16.04 下安装 PyTorch(conda与pip两种方式安装)
- PHP.ini配置文件中文【转】
- 铁路工程词汇-中英对照
- Linux内存管理宏观篇(三)物理内存:物理页面
- 台积电开始试产3nm ,苹果、Intel公司也有意向在跟进3nm技术
- 解决GitHub报错: Support for password authentication was removed on August 13, 2021
- 关闭 Administrator 账户
热门文章
- Java Timer定时器 使用
- Windows Server 2008 多元密码策略之ADSIEDIT
- struct tm 和 time_t
- 《编程匠艺》读书笔记之十四
- ZCF提出解决零确认交易安全问题新方案
- API网关与zuul1.x与springcloud的三角关系
- 对FCKEditor = 2.6.4 通杀 exploit 的分析
- Android ViewPager嵌套ViewPager滑动冲突处理方法
- Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.
- SQL创建linkserver