• 传统意义的四舍五入计算


    看看net的四舍五入:

      static void Main(string[] args)
            {
                Console.WriteLine(Math.Round(1.015, 2));
                Console.WriteLine(Math.Round(1.0151, 2));
                Console.WriteLine(Math.Round(1.0149, 2));
      
                Console.ReadLine();
            }

    Output:

    1.01
    1.02
    1.01
    View Code

    可以看出不是我们想要的四舍五入。

    Code:

        /// <summary>
            /// 四舍五入计算
            /// </summary>
            /// <param name="value"></param>
            /// <param name="digit"></param>
            /// <returns></returns>
            public double Round(double value, int digit = 0)
            {
                return Round(Convert.ToDecimal(value), digit);
            }
    
            public double Round(decimal value, int digit = 0)
            {
                decimal vt = Convert.ToDecimal(Math.Pow(10, digit));
                //1.乘以倍数 + 0.5
                decimal vx =  value * vt + 0.5m;
                //2.向下取整
                decimal temp = Math.Floor(vx);
                //3.再除以倍数
                return Convert.ToDouble(temp / vt);
            }
        static void Main(string[] args)
            {
                Console.WriteLine(Round(1.015, 2));
                Console.WriteLine(Round(1.0151,2));
                Console.WriteLine(Round(1.0149, 2));
     
                Console.ReadLine();
            }

    Output:

    1.02
    1.02
    1.01

    C#用double,float浮点计算会有误差,所以切换成decimal计算。

    =============================================================================

    Js端:

    toFixed

    console.log(1.049.toFixed(2));
    console.log(1.054.toFixed(2));
    console.log(1.055.toFixed(2));
    console.log(1.056.toFixed(2));
    VM224:1 1.05
    VM224:2 1.05
    VM224:3 1.05
    VM224:4 1.06

    发现1.055错误

    Math.round

    console.log(Math.round(1.049*100)/100);
    console.log(Math.round(1.054*100)/100);
    console.log(Math.round(1.055*100)/100);
    console.log(Math.round(1.059*100)/100);
    VM309:1 1.05
    VM309:2 1.05
    VM309:3 1.06
    VM309:4 1.06

    OK

    code:

      function Round(value, digit)
            {
                if(!digit)digit=0;
                var vt =  Math.pow(10, digit);
                //1.乘以倍数 + 0.5
                var vx = value  * vt + 0.5;
                //2.向下取整
                var temp = Math.floor(vx);
                //3.再除以倍数
                return  temp / vt;
            }

    =================================================

    js的浮点计算:

    http://blog.csdn.net/qinshenxue/article/details/43671763

  • 相关阅读:
    oracle乱码问题
    fopen 參数具体解释
    图像特征提取方法:Bag-of-words
    事务应用-运行多条SQL语句
    八大排序算法总结
    svn经常使用命令具体解释(非常全,非常有用)
    android layout属性介绍
    ubuntu/linux mint 创建proc文件的三种方法(四)
    在归档模式下删除非系统文件的恢复
    解决使用DevExpress开发错误:未将对象引用设置到对象的实例
  • 原文地址:https://www.cnblogs.com/hongdada/p/7070326.html
Copyright © 2020-2023  润新知