zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    js double 精度损失 bugs

    const arr = [
      0.01, 0.01, 0.01,
      0.01, 0.01, 0.01,
      0.01, 0.01, 0.01,
      0.01
    ];
    
    // [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
    
    arr.reduce((acc, i) => acc += i);
    // 0.09999999999999999
    
    

    arr = [
      0.01, 0.01, 0.01,
      0.01, 0.01, 0.01,
      0.01, 0.01, 0.01,
      0.01
    ]
    (10) [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
    
    arr.reduce((acc, i) => acc += i);
    0.09999999999999999
    
    sum = 0;
    0
    sum += 0.01;
    0.01
    sum += 0.01;
    0.02
    sum += 0.01;
    0.03
    sum += 0.01;
    0.04
    sum += 0.01;
    0.05
    sum += 0.01;
    0.060000000000000005
    sum += 0.01;
    0.07
    sum += 0.01;
    0.08
    sum += 0.01;
    0.09
    sum += 0.01;
    0.09999999999999999
    
    // 保留两位精度 ?
    
    

    解决方案

    1. string 大数相加 / 大数相乘

    
    arr = [
      0.01, 0.01, 0.01,
      0.01, 0.01, 0.01,
      0.01, 0.01, 0.01,
      0.01
    ];
    (10) [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
    
    arr.reduce((acc, i) => acc += Number.parseFloat(i).toFixed(2));
    "0.010.010.010.010.010.010.010.010.010.01"
    
    arr.reduce((acc, i) => acc += parseFloat(i.toFixed(2)));
    0.09999999999999999
    
    arr.reduce((acc, i) => acc += i.toFixed(2));
    "0.010.010.010.010.010.010.010.010.010.01"
    
    arr.map(i => i.toFixed(2));
    (10) ["0.01", "0.01", "0.01", "0.01", "0.01", "0.01", "0.01", "0.01", "0.01", "0.01"]
    
    // string 大数相加, ??? 位运算
    
    
    1. 小数转整数
    arr = [
      0.01, 0.01, 0.01,
      0.01, 0.01, 0.01,
      0.01, 0.01, 0.01,
      0.01
    ];
    (10) [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
    arr.map(i => i * 100).reduce((acc, i) => acc += i) / 100;
    0.1
    
    
    

    红包算法

    refs

    最简单的方法实现微信红包的随机算法

    https://www.cnblogs.com/xgqfrms/p/13688375.html



    ©xgqfrms 2012-2020

    www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    陈应松《母亲》
    黄灯:一个农村儿媳眼中的乡村图景
    喝完茶为什么嘴里是甜的
    俗语一千条
    XtraBackup完整备份与增量备份的原理
    李嘉诚:90%考虑失败 关注细节
    redo和undo的区别
    tar命令
    自增锁引发的悲剧
    各版本 MySQL 并行复制的实现及优缺点
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/13689522.html
Copyright © 2011-2022 走看看