zoukankan      html  css  js  c++  java
  • JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去… 及其浮点数计算精度问题(推荐的类库 Numeral.js 和 accounting.js)

    前端开发中经常会碰到用 JavaScript 格式化数字,最最常见的是格式化金额,一般格式化金额需要千分位分隔,保留2位小数等等。

    还有偶然会遇到的使用 js 计算浮点数时出现误差。

    完善的功能函数推荐文章(标题内容):http://www.css88.com/archives/7324#more-7324

    JavaScript 浮点数计算精度问题简单解决

    摘要: 
    由于计算机是用二进制来存储和处理数字,不能精确表示浮点数,而JavaScript中没有相应的封装类来处理浮点数运算,直接计算会导致运算精度丢失。

    JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定

    console.log( 0.1 + 0.2 );  //0.30000000000000004

    方法一:使用 toFixed 进行四舍五入指定要保留的小数位数

    console.log(( 0.1 + 0.2 ).toFixed(1));  // 0.3

    缺点:其实不精确,特别对于计算金额类的严谨问题不推荐使用,且不同浏览器对其计算结果存在差异。

    方法二:把需要计算的数字升级(乘以10的n次幂)成计算机能够精确识别的整数,等计算完毕再降级(除以10的n次幂),这是大部分编程语言处理精度差异的通用方法。

    console.log((0.1*10 + 0.2*10)/10); // 0.3

    额外:http://blog.csdn.net/u012143360/article/details/53148591

    通过将浮点数转换成整数进行计算,然后再将整数的小数点位调整,转回正确的浮点数结果。

    console.log(6.8-0.9);  // 5.8999999999999995
    console.log(Math.round((6.8-0.9)*10)); // 59
    Math.formatFloat = function (f, digit) {
    var m = Math.pow(10, digit);
    return Math.round(f * m, 10) / m;
    };
    console.log(Math.formatFloat(6.8-0.9,2)); // 5.9

    12年的前辈总结:http://blog.51cto.com/xzllff/831241

    13年自定义函数:https://www.cnblogs.com/wangkongming/archive/2013/01/18/2866788.html

    17年css88加减乘除函数:http://www.css88.com/archives/7340
    纯做笔记,如伤过客……真的对不起la
  • 相关阅读:
    AB压力测试(Windows)
    Ensure You Are Not Adding To Global Scope in JavaScript(转)
    使用jasmine来对js进行单元测试
    HTML5安全:CORS(跨域资源共享)简介(转)
    asp.net+jquery Jsonp使用方法(转)
    在ios上时间无法parse返回 "Invalid Date"(转)
    用document.domain完美解决Ajax跨子域 (转)
    IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题
    NodeJs:module.filename、__filename、__dirname、process.cwd()和require.main.filename 解惑(转)
    关于反射的一些总结(转)
  • 原文地址:https://www.cnblogs.com/DoubleLoong/p/8310337.html
Copyright © 2011-2022 走看看