两个数相乘(包括整数和小数),精度问题
2017-03-23 20:29
190 查看
假设a和b相乘,a、b都有可能是小数,返回相乘的结果(注意精度问题)
举个栗子:a=4, b=0.0002——结果:0.0008
var a = 4;
var b = 0.0002;
//首先把两个数转换成字符串(十进制)
var str1 = a.toString();
var str2 = b.toString();
//分别取得两个数的小数位数(确定精度)
var l1 = (str1.indexOf('.') == -1) ? 0:(str1.length - str1.indexOf('.') - 1);
var l2 = (str2.indexOf('.') == -1) ? 0 : (str2.length - str2.indexOf('.') - 1);
var l = Math.max(l1, l2);
//根据精度计算结果
var result = parseFloat(a * b).toFixed(l);
return result;
① parseFloat() 函数可解析一个字符串,并返回一个浮点数;
② toFixed() 方法可把 Number 四舍五入为指定小数位数的数字;
③
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置:这里,如果这个数不是小数,则str.indexOf('.')返回-1,如果是小数,则返回小数点在字符串中第一次出现的位置;
④
获取小数位数:str1.length - str1.ind
96d5
exOf('.') - 1,小数的位数 = 字符串的长度 - 小数点第一次在字符串中出现的位置 - 1;
举个栗子:123.56(小数位数
= 6 - 3 - 1 = 2)
举个栗子:a=4, b=0.0002——结果:0.0008
var a = 4;
var b = 0.0002;
//首先把两个数转换成字符串(十进制)
var str1 = a.toString();
var str2 = b.toString();
//分别取得两个数的小数位数(确定精度)
var l1 = (str1.indexOf('.') == -1) ? 0:(str1.length - str1.indexOf('.') - 1);
var l2 = (str2.indexOf('.') == -1) ? 0 : (str2.length - str2.indexOf('.') - 1);
var l = Math.max(l1, l2);
//根据精度计算结果
var result = parseFloat(a * b).toFixed(l);
return result;
① parseFloat() 函数可解析一个字符串,并返回一个浮点数;
② toFixed() 方法可把 Number 四舍五入为指定小数位数的数字;
③
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置:这里,如果这个数不是小数,则str.indexOf('.')返回-1,如果是小数,则返回小数点在字符串中第一次出现的位置;
④
获取小数位数:str1.length - str1.ind
96d5
exOf('.') - 1,小数的位数 = 字符串的长度 - 小数点第一次在字符串中出现的位置 - 1;
举个栗子:123.56(小数位数
= 6 - 3 - 1 = 2)
相关文章推荐
- C 语言 实现大数相乘问题(包括正、负整数,另外还附有详细注释)
- js小数相加、相乘失去精度问题解析详解(最优方案)
- 3、求两个大整数的相乘问题
- 分治法的经典问题——大整数相乘
- 大整数相乘问题
- js 浮点小数计算精度问题 parseFloat 精度问题
- 分治算法-最近点对问题、大整数相乘
- 关于整数部分为0的小数在web上的显示问题
- JavaScript 中小数和大整数的精度丢失
- 2.创建一个抽象类A,该类中包含一个求两个数之和抽象方法。创建一个子类B,在B中重写求和方法,且使用方法重载使得方法可以分别计算整数、双精度、字符串
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- 关于双精度与单精度double,float小数尾数的问题
- 分治法的经典问题——大整数相乘
- mysql navicat存入小数自动转化成整数的问题
- 大整数数相乘的问题
- js,java小数计算精度问题
- JavaScript 中小数和大整数的精度丢失
- zjut 1740 Find x 从此题推广到求一个数的N次方的小数精度问题
- 大整数数相乘的问题
- 大整数相乘的问题