javascript的小数点乘法除法实例

导语:想要学好Java语言,必不可少的就是它的四则运算,特别是乘除法。下面的是百分网小编为大家搜集的javascript的小数点乘法除法实例,希望可以帮到你。

一、用js计算

12.32 * 7  结果是多少?答案:86.24000000000001

为什么会出现这种问题?怎么解决?

js在处理小数的乘除法的时候有一个bug,解决的方法可以是:将小数变为整数来处理。

以上的计算可以改为:

12.32 * 100 * 7 /100

得出的结果是:86.24,正确。

另外再计算一下:

8.80 * 100 * 12 / 100

结果:105.60000000000002

38.80也会出现类似的问题。

精确度增加10倍:

8.80 * 1000 * 12 / 1000

结果:105.6

正常了。

16.40 * 1000000 * 6 / 1000000

结果也有问题

为了让js执行的更准确,在以后的js小数计算中直接将值扩大10000倍,再除以10000,就可以解决问题。

var num = 38.80;

var num2 = 13;

alert(num * 10000 * 12 / 10000);

被乘和除的这个数经过测试10000最合适,小了有些数字出问题,大了(1000000)有些数字也出问题。

二、

Number.prototype.rate=function(){

varoStr=this.toString();

if(oStr.indexOf(".")==-1)

return1;

else

returnMath.pow(10,parseInt(oStr.length-oStr.indexOf(".")-1));

}

functiontran(){

args=tran.arguments;

vartemp=1;

for(i=0;i

temp*=args[i]*args[i].rate();

for(i=0;i

temp/=args[i].rate();

returntemp

}

alert(tran(11,22.9));

该解决 办法是比较麻烦的办法,但是却能让你大概了解解决这个问题的实际过程。

//除法函数,用来得到精确的除法结果

//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。

//调用:accp(arg1,arg2)

//返回值:arg1除以arg2的精确结果

function accp(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类型增加一个p方法,调用起来更加 方便。

Number.prototype.p = function (arg){

return accp(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)

}

// 给Number类型增加一个mul方法,调用起来更加方便。

Number.prototype.mul = function (arg){

return accMul(arg, this);

}

//加法函数,用来得到精确的加法结果

//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。

//调用:accAdd(arg1,arg2)

// 返回值:arg1加上arg2的精确结果

function accAdd(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

}

//给Number类型增加一个add方法,调用起来更加方便。

Number.prototype.add = function (arg){

return accAdd(arg,this);

}

【javascript的小数点乘法除法实例】相关文章:

java中小数的乘法_javascript的小数点乘法除法实例相关推荐

  1. java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定

    java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定 2016年05月11日 11:20:08 阅读数:6336 一. 计算机的小数计算一定范围内精确,超过范围只能 ...

  2. java小数的数据类型_【填空题】Java 中小数默认的数据类型为 ,如果要指定为 类型,要在小数后面加F或f。...

    [填空题]Java 中小数默认的数据类型为 ,如果要指定为 类型,要在小数后面加F或f. 更多相关问题 - Your plan is perfect and I believe that it wil ...

  3. java中小数后加f_在 Java 中,小数默认为 ,如果要指定 类型请在小数后加 F/f 。_学小易找答案...

    [填空题]Java 语言采用双字节的 编码. [单选题]马斯洛需要层次论所提出的5种需要:生理需要.安全需要.归属需要.( ).自我实现需要 [填空题]String s= " abc &qu ...

  4. Java中 方法引用、Stream流、及方法实例 D190401

    Java中 方法引用.Stream流.及方法实例 D190401 01.第三章:方法引用_什么是方法引用 1).什么是"方法引用":指引用现有的方法代替Lambda表达式--当我们 ...

  5. java中小数类型_java中小数属于什么类型的数据

    展开全部 小数属于浮点型(默认为double). 浮点型代表的是实数,其实就是包含小数的部分.也知道现实世界中是由32313133353236313431303231363533e59b9ee7ad9 ...

  6. Java中小数默认为double类型

    A:5.3e12表示5.3乘以10的12次方,正确 B:在Java中,如果你输入一个小数,系统默认的是double类型的,这个式子相当于 float f=double 11.1,明显错误,如果想要表达 ...

  7. JAVA中小数为什么不精确

    计算机之所以叫"计算"机就是因为发明它主要是用来计算的,"计算"当然是它的特长,在大家的印象中,计算一定是非常准确的.但实际上,即使在一些非常基本的小数运算中, ...

  8. java中this的含义_Javascript中的this的含义

    一.几个问题 JavaScript中的this代表什么?和Java对象里面的this或Objective-C里的self是否有相同的含义? // demo 1 var a = 2; function ...

  9. Java中的Collection集合以及Collection集合实现类实例

    Collection集合 集合概述 集合的体系特点 Collection集合常用API Collection集合的遍历方式 方式一:迭代器 方式二:foreach/增强for循环 方式三:lambda ...

最新文章

  1. 2021年春季学期-信号与系统-第六次作业参考答案-第一小题
  2. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一、pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主
  3. 模块化妙用!用vue3实现一个鼠标追踪器和异步加载组件
  4. linux上验证cudnn是否安装成功_deepin15.7中安装tensorflow+cuda9.0+cudnn7的步骤
  5. 编写一个C程序,实现以下功能:动态申请长度为5的整数空间数组,用户输入5个整数;动态扩展数组空间为8,用户另外输入3个整数,最后输出扩展后的全部数组元素。
  6. (计算机组成原理)第三章存储系统-第五节1:双端口RAM和多模块存储器
  7. silverlight3:(ItemControl 的)UI Virtualization
  8. 思科警告:IOS 路由器中含有多个严重缺陷,可导致“系统完全受陷”
  9. java 编译环境不一致_安装多JDK后,java编译环境和运行环境版本(JDK版本) 不一致解决:...
  10. BZOJ 2466 [中山市选2009]树(高斯消元)
  11. oracle 行列转换 pivot unpivot (本文来自官网)
  12. L1-078 吉老师的回归 (15 分)
  13. 华南师范大学计算机学院官网,朱佳(华南师范大学计算机学院研究员)_百度百科...
  14. 易智联LM401模块学习(一)——初识Lora
  15. 线性代数基础和英文表述【01】:方程、矢量、线性系统和他的解【第1-3】The solution of linear system with 2D/3D Geometrically
  16. Windows安全中心输入用户名密码
  17. C语言课程设计交通处罚单管理系统
  18. DOTA版设计模式——命令
  19. NFLS OJ 1162 暴力
  20. yellow dog linux ps3,ps3安装yellow dog linux相关

热门文章

  1. 知识图谱学习笔记-图操作
  2. python 库整理:toolz.curried (整理中)
  3. Python 黑魔法 --- 描述器(descriptor)
  4. Tableau系列之圆环图制作
  5. uni-app读取html缓存,uni-app同步缓存值 设置 读取 删除(示例代码)
  6. python实现三叉树_使用python代码实现三叉搜索树高效率”自动输入提示”功能
  7. 【Linux】24_网络管理数据链路层详解
  8. AI新浪潮:截止2022年,全球74%的计算将来自端侧
  9. 微服务实践分享(8) 控制调用中心
  10. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform