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
  • 相关阅读:
    再论 ASP.NET 中获取客户端IP地址
    修改MariaDB 路径
    CentOS MariaDB 安装和配置
    asp.net core 使用protobuf
    Xamarin绑定微信SDK 实现分享功能
    iOS中转义后的html标签如何还原
    MvvmCross框架在XamarinForms中的使用入门
    Xamarin.Form 初学 之 服务引用-WCF服务引用
    程序员求职面试三部曲之三:快速适应新的工作环境
    程序员求职面试三部曲之二:提高面试的成功率
  • 原文地址:https://www.cnblogs.com/DoubleLoong/p/8310337.html
Copyright © 2011-2022 走看看