zoukankan      html  css  js  c++  java
  • 保留小数位toFixed()方法的怪异表现

    1 、tofixed方法

    toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。例如将数据Num保留2位小数,则表示为:toFixed(Num);但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则,银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。具体规则如下:

    简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。通过谷歌测试:前两句是对的,四舍六入五考虑,五后非零就进一,五后为零的情况和前面的数字有关,但不仅仅是奇偶的关系;而且五后为零后面还有非零也进一,总之在计算的时候可能这就不是我们想要的了,不符合数学规律;

    先走一波测试(谷歌):

    12.050.toFixed(1)
    "12.1"
    12.150.toFixed(1)
    "12.2"
    12.250.toFixed(1)
    "12.3"
    12.350.toFixed(1)////////
    "12.3"
    12.450.toFixed(1)////////
    "12.4"
    12.550.toFixed(1)
    "12.6"
    12.650.toFixed(1)
    "12.7"
    12.750.toFixed(1)
    "12.8"
    12.850.toFixed(1)/////////
    "12.8"
    12.950.toFixed(1)/////////
    "12.9"

    12.9501.toFixed(1)
    "13.0"

    2 、Math.round()方法

    例如:对于X进行保留两位小数的处理,则可以使用Math.round(X * 100) / 100.进行处理

    function mathfloat(num, n) {
        n = n ? parseInt(n) : 0;
        if(n <= 0) {
            return Math.round(num);
        }
        num = Math.round(num * Math.pow(10, n)) / Math.pow(10, n); //四舍五入
        num = Number(num).toFixed(n); //补足位数
        return num;
    };
  • 相关阅读:
    leetcode-237-删除链表中的节点
    leetcode-125-验证回文串
    leetcode-217-存在重复元素
    leetcode-189-旋转数组
    leetcode-121-买卖股票的最佳时机
    leetcde-27-移除元素
    redis相关
    leetcode-26-删除排序数组中的重复项
    leetcode-16-最接近的三数之和
    基础-递归
  • 原文地址:https://www.cnblogs.com/wangtaolearning/p/12557685.html
Copyright © 2011-2022 走看看