一个解决js浮点运算精度的代码


声明:本文转载自https://my.oschina.net/cjlice/blog/1616682,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

比市面上很多解决方案都要准确的方案^_^

<!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <meta name="viewport" content="width=device-width, initial-scale=1.0">   <meta http-equiv="X-UA-Compatible" content="ie=edge">   <title>Document</title> </head> <body>   操作数1:<input id="a">   操作数2:<input id="b">   <button>加</button>   <button>减</button>   <button>乘</button>   <button>除</button>   结果:<span id="result"></span>   <script> // 补0 function padding0 (p) {   var z = ''   while (p--) {     z += '0'   }   return z }  /**  * 解决小数精度问题  * @param {*数字} a  * @param {*数字} b  * @param {*符号} sign  * fixedFloat(0.3, 0.2, '-')  */ function fixedFloat (a, b, sign) {   function handle (x) {     var y = String(x)     var p = y.lastIndexOf('.')     if (p === -1) {       return [y, 0]     } else {       return [y.replace('.', ''), y.length - p - 1]     }   }   // v 操作数1, w 操作数2, s 操作符, t 精度   function operate (v, w, s, t) {     switch (s) {       case '+': return (v + w) / t       case '-': return (v - w) / t       case '*': return (v * w) / (t * t)       case '/': return (v / w)     }   }    var c = handle(a)   var d = handle(b)   var k = 0    if (c[1] === 0 && d[1] === 0) {     return operate(+c[0], +d[0], sign, 1)   } else {     k = Math.pow(10, Math.max(c[1], d[1]))     if (c[1] !== d[1]) {       if (c[1] > d[1]) {         d[0] += padding0(c[1] - d[1])       } else {         c[0] += padding0(d[1] - c[1])       }     }     return operate(+c[0], +d[0], sign, k)   } } // 加 function plus (a, b) {   return fixedFloat(a, b, '+') } // 减 function minus (a, b) {   return fixedFloat(a, b, '-') } // 乘 function multiply (a, b) {   return fixedFloat(a, b, '*') } // 除 function division (a, b) {   return fixedFloat(a, b, '/') }   </script>    <script>   // 操作部分   var a = document.getElementById('a')   var b = document.getElementById('b')   var result = document.getElementById('result')   document.addEventListener('click', function (e) {     if (e.target.nodeName === 'BUTTON') {       var v = 0       switch (e.target.innerText) {         case '加': result.innerText = plus(a.value, b.value)           break         case '减': result.innerText = minus(a.value, b.value)           break         case '乘': result.innerText = multiply(a.value, b.value)           break         case '除': result.innerText = division(a.value, b.value)           break       }     }   })   </script> </body> </html> 

本文发表于2018年02月01日 16:31
(c)注:本文转载自https://my.oschina.net/cjlice/blog/1616682,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1852 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1