问题的出现
当对浮点型小数进行运算时,js可能会精度丢失,事实上,所有的高级语言都面临着这个问题,这是因为对于浮点数的运算是二进制运算。
问题的解决
java有一个BigaungDecimal类专门解决着一个问题,对于js,我们也可以参考Java的思路,把数字变成字符串,一个字符一个字符的计算,就和我们小学列竖式一样,这样必然不会出问题。但是我现在有一个新的解决思路。
可以看到,0.3*3会精度丢失,但是先让0.3*10然后再把10除回来,就不会了。所以只要我先把小数都变成整数,再把位数调回来,问题是不是就解决了,然后如下,我在js中封装了一个这样的类。
const BigDecimal=function(num){
if(typeof(num)!="string"&&isNaN(num)){
throw "The Value must be a string that can be transform to nummber"
}else{
this.num=num
this.class="BigDecimal"
this.getInt=function(){
return this.num.replace(".","")*1
}
this.getDigit=function(){
let list=this.num.split(".")
if(list.length