1. /**
  2. * 加法运算,避免数据相加小数点后产生多位数和计算精度损失。
  3. *
  4. * @param num1加数1 | num2加数2
  5. */
  6. function numAdd(num1, num2) {
  7. var baseNum, baseNum1, baseNum2;
  8. try {
  9. baseNum1 = num1.toString().split(".")[1].length;
  10. } catch (e) {
  11. baseNum1 = 0;
  12. }
  13. try {
  14. baseNum2 = num2.toString().split(".")[1].length;
  15. } catch (e) {
  16. baseNum2 = 0;
  17. }
  18. baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  19. return (num1 * baseNum + num2 * baseNum) / baseNum;
  20. };
  21. /**
  22. * 减法运算,避免数据相减小数点后产生多位数和计算精度损失。
  23. *
  24. * @param num1被减数 | num2减数
  25. */
  26. function numSub(num1, num2) {
  27. var baseNum, baseNum1, baseNum2;
  28. var precision;// 精度
  29. try {
  30. baseNum1 = num1.toString().split(".")[1].length;
  31. } catch (e) {
  32. baseNum1 = 0;
  33. }
  34. try {
  35. baseNum2 = num2.toString().split(".")[1].length;
  36. } catch (e) {
  37. baseNum2 = 0;
  38. }
  39. baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  40. precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
  41. return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
  42. };
  43. /**
  44. * 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。
  45. *
  46. * @param num1被乘数 | num2乘数
  47. */
  48. function numMulti(num1, num2) {
  49. var baseNum = 0;
  50. try {
  51. baseNum += num1.toString().split(".")[1].length;
  52. } catch (e) {
  53. }
  54. try {
  55. baseNum += num2.toString().split(".")[1].length;
  56. } catch (e) {
  57. }
  58. return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
  59. };
  60. /**
  61. * 除法运算,避免数据相除小数点后产生多位数和计算精度损失。
  62. *
  63. * @param num1被除数 | num2除数
  64. */
  65. function numDiv(num1, num2) {
  66. var baseNum1 = 0, baseNum2 = 0;
  67. var baseNum3, baseNum4;
  68. try {
  69. baseNum1 = num1.toString().split(".")[1].length;
  70. } catch (e) {
  71. baseNum1 = 0;
  72. }
  73. try {
  74. baseNum2 = num2.toString().split(".")[1].length;
  75. } catch (e) {
  76. baseNum2 = 0;
  77. }
  78. with (Math) {
  79. baseNum3 = Number(num1.toString().replace(".", ""));
  80. baseNum4 = Number(num2.toString().replace(".", ""));
  81. return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);
  82. }
  83. };

JS小数点加减乘除运算后位数增加的解决方案的更多相关文章

  1. JS 浮点加减乘除运算

    //浮点数加法运算 function FloatAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".")[1]. ...

  2. js中多个数字运算后值不对(失真)处理方法

    最近遇到一个bug ,在js里面计算两个数字相减,633011.20-31296.30 得到的结果居然是601714.89,领导不乐意了说怎么少了0.01,我一听,噶卵达,来达鬼,不可能啊,我Goog ...

  3. js,java,浮点数运算错误及应对方法

    js,java浮点数运算错误及应对方法 一,浮点数为什么会有运算错误 IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换.算术格式以及方法. 现有存储介质都是2进制.2 ...

  4. BigDecimal加减乘除运算(转)

    java.math.BigDecimal.BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val) Translates a doub ...

  5. js中位运算的运用

    原文:js中位运算的运用 我们可能很少在编程中用位运算,如果没深入学习,可能也很难理解.平时的数值运算,其实是要先转换成二进制再进行运算的,而位运算就是直接进行二进制运算,所以位运算的执行效率肯定是更 ...

  6. js做小数运算精度问题

    当js做小数运算时存在bug,大概是因为二进制和十进制转换之间的关系. bug如图 解决方案 1.运算结果后,乘以100再除以100.网上推荐这种方法但是乘以1000再除以1000依然存在精度问题 2 ...

  7. JS浮点数精度运算

    一般来讲,我们在项目中必不可少的需要进行各种数值的计算,但是这种计算全部放在服务端会给服务器带来很大的压力,所以势必要客户端来 分担一些计算的压力. 从客户端来说,JavaScript是一门弱类型语言 ...

  8. js小数加减乘除时精度不准确

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_33237207/article/d ...

  9. 第十四篇 JS实现加减乘除 正则表达式

    JS实现加减乘除 这节课,将会继续使用到if判断,会让同学们再看到一个新的,else if判断语句,意思是:否则如果,是基于if下的判断语句,就是说,if不成立则再来判断else if,可以这样,假如 ...

随机推荐

  1. ACM: 限时训练题解-Rock-Paper-Scissors-前缀和

    Rock-Paper-Scissors   Rock-Paper-Scissors is a two-player game, where each player chooses one of Roc ...

  2. @font-face制作Web Icon

    @font-face是CSS3中有关于字体设置的属性,通过@font-face可以将本地字体设置为Web页面字体,并能兼容所有浏览器,使用这个属性就不必担心用户本地不具备这样的字体.因为我们把字体都上 ...

  3. UITableView常见 UI 问题总结

    一,经历 1.让 group 形式的UITableView的单元格也可以修改separatorStyle属性来设置. 2.修改group形式的UITableView的 cell 之间的间距,可以更改s ...

  4. db2代理和优化

    DB2 的代理 (agent) 是位于 DB2 服务器中的服务于应用程序请求的一些进程或线程.当有外部应用程序连接至 DB2 实例提出访问请求时,DB2 的代理就会被激活去应答这些请求.一般 DB2 ...

  5. iOS 项目中用到的一些开源库和第三方组件

    iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ...

  6. 20145330《Java程序设计》第四周学习总结

    20145330<Java程序设计>第四周学习总结 一周两章新知识的自学与理解真的是很考验和锻炼我们,也对前面几章我们的学习进行了检测,遇到忘记和不懂的知识就再复习前面的,如此巩固也让我对 ...

  7. URL编码:不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果。

    URL编码:不同的操作系统.不同的浏览器.不同的网页字符集,将导致完全不同的编码结果. 因此如果Url中有中文或特殊字符,一定要自己调用函数编码解码,不要让浏览器帮你编码,否则出现了问题会浪费你很多时 ...

  8. Hibernate检索策略之延迟加载和立即加载

    延迟加载:延迟加载(lazy load懒加载)是当在真正需要数据时,才执行SQL语句进行查询.避免了无谓的性能开销. 延迟加载分类:  1.类级别的查询策略 2.一对多和多对多关联的查询策略 3.多对 ...

  9. android中的ActionBar和ToolBar

    一.ToolBar 1.概述 Google在2015的IO大会上发布了系列的Material Design风格的控件.其中ToolBar是替代ActionBar的控件.由于ActionBar在各个安卓 ...

  10. 获取Android studio的SHA1值

    D:\Android\BaiduMapsApiASDemo>c: C:\>cd .android 系统找不到指定的路径. C:\>cd Users C:\Users>cd Ad ...