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


    看看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

  • 相关阅读:
    Linux Shell参数替换
    Linux下redis的安装
    Make 命令教程
    linux环境变量 export命令详解
    Java分布式应用技术架构介绍
    centos mysql忘记密码
    <context:component-scan>使用说明
    Spring <context:annotation-config/> 解说
    [Visio]直线工具和连接线工具的区别
    [Visual Studio Code] 字体设置
  • 原文地址:https://www.cnblogs.com/hongdada/p/7070326.html
Copyright © 2020-2023  润新知