浮点数转换问题

229 阅读1分钟
浮点数转换问题

碰到尾数为5 的浮点数一般来说会使用 toFixed,进行四舍五入。但是具体业务中,四舍五入是不被允许的,差了0.001个百分点都会造成金额上的巨大差距。

具体场景

后端接受的数据为正常数字/100,单位为 ' % '。

2.135 => 0.02135 //输入2.135传0.02135 
显示的数字

前端显示为:

2.135 + '%' //2.135%
处理
给后端的数字:
(2.135 * 1000)/100000 

先使其变成整数,再使用除法。如果不使其变成整数,数字末尾就会跟上很多0或9。

前端显示

直接执行 *100 ,如:

0.02135 * 100 //2.1350000000000002

不如直接使用正则:

handleRate(num){
  return (num + '00').replace(/\.([\d]  {2})/,'$1.') * 1;
}
handleRate(0.02135) // 2.135