• 四舍五入问题(粗糙版)


      StringBuilder str = new StringBuilder();
    
                 float hh = 2.345f;
                 float hh2 = 2.355f;
                 double tt1 = 526.955;
                 double tt2 = 526.945;
                 double tt3 = 526.935;
                 decimal ss1 = 4.445M;
                 decimal ss2 = 4.435M;
                 str.AppendFormat("{0}类型为{1},tostring("0.00")计算结果为{2}<br/>", tt1, tt1.GetType(), tt1.ToString("0.00"));
                 str.AppendFormat("{0}类型为{1},tostring("0.00")计算结果为{2}<br/>", tt2, tt2.GetType(), tt2.ToString("0.00"));
                 str.AppendFormat("{0}类型为{1},tostring("0.00")计算结果为{2}<br/>", hh, hh.GetType(), hh.ToString("0.00"));
                 str.AppendFormat("{0}类型为{1},tostring("0.00")计算结果为{2}<br/>", hh2, hh2.GetType(), hh2.ToString("0.00"));
                 str.AppendFormat("{0}类型为{1},tostring("0.00")计算结果为{2}<br/>", ss1, ss1.GetType(), ss1.ToString("0.00"));
                 str.AppendFormat("{0}类型为{1},tostring("0.00")计算结果为{2}<br/>", ss2, ss2.GetType(), ss2.ToString("0.00"));            
    
                 str.AppendFormat("{0}类型为{1},Math.Round计算结果为{2}<br/>", hh, hh.GetType(), Math.Round(hh, 2));
                 str.AppendFormat("{0}类型为{1},Math.Round计算结果为{2}<br/>", hh2, hh2.GetType(), Math.Round(hh2, 2));
                 str.AppendFormat("{0}类型为{1},Math.Round附加,计算结果为{2}<br/>", hh, hh.GetType(), Math.Round(hh, 2, MidpointRounding.AwayFromZero));
                 str.AppendFormat("{0}类型为{1},Math.Round附加,计算结果为{2}<br/><br/>", hh2, hh2.GetType(), Math.Round(hh2, 2, MidpointRounding.AwayFromZero));
    
    
                 str.AppendFormat("数字{0},Math.Round计算结果为{1}<br/>", "6.345", Math.Round(6.345, 2));
                 str.AppendFormat("数字{0},Math.Round计算结果为{1}<br/>", "6.355", Math.Round(6.355, 2));
                 str.AppendFormat("数字{0},Math.Round计算结果为{1}<br/>", "6.335", Math.Round(6.335, 2));
                 str.AppendFormat("数字{0},Math.Round附加,计算结果为{1}<br/>", "6.345", Math.Round(6.345, 2, MidpointRounding.AwayFromZero));
                 str.AppendFormat("数字{0},Math.Round附加,计算结果为{1}<br/>", "6.355", Math.Round(6.355, 2, MidpointRounding.AwayFromZero));
                 str.AppendFormat("数字{0},Math.Round附加,计算结果为{1}<br/><br/>", "6.335", Math.Round(6.335, 2, MidpointRounding.AwayFromZero));
    
                 str.AppendFormat("{0}类型为{1},Math.Round计算结果为{2}<br/>", tt1, tt1.GetType(), Math.Round(tt1, 2));
                 str.AppendFormat("{0}类型为{1},Math.Round计算结果为{2}<br/>", tt2, tt2.GetType(), Math.Round(tt2, 2));
                 str.AppendFormat("{0}类型为{1},Math.Round计算结果为{2}<br/><br/>", tt3, tt3.GetType(), Math.Round(tt3, 2));
    
                 str.AppendFormat("{0}类型为{1},Math.Round附加,计算结果为{2}<br/>", tt1, tt1.GetType(), Math.Round(tt1, 2, MidpointRounding.AwayFromZero));
                 str.AppendFormat("{0}类型为{1},Math.Round附加,计算结果为{2}<br/>", tt2, tt2.GetType(), Math.Round(tt2, 2, MidpointRounding.AwayFromZero));
                 str.AppendFormat("{0}类型为{1},Math.Round附加,计算结果为{2}<br/><br/>", tt3, tt3.GetType(), Math.Round(tt3, 2, MidpointRounding.AwayFromZero));
    
                 str.AppendFormat("{0}类型为{1},Math.Round计算结果为{2}<br/>", ss1, ss1.GetType(), Math.Round(ss1, 2));
                 str.AppendFormat("{0}类型为{1},Math.Round计算结果为{2}<br/>", ss2, ss2.GetType(), Math.Round(ss2, 2));
                 str.AppendFormat("{0}类型为{1},Math.Round附加,计算结果为{2}<br/>", ss1, ss1.GetType(), Math.Round(ss1, 2, MidpointRounding.AwayFromZero));
                 str.AppendFormat("{0}类型为{1},Math.Round附加,计算结果为{2}<br/>", ss2, ss2.GetType(), Math.Round(ss2, 2, MidpointRounding.AwayFromZero));         
    
                 Response.Write(str);

    下面都是测试数据

    526.955类型为System.Double,tostring("0.00")计算结果为526.96
    526.945类型为System.Double,tostring("0.00")计算结果为526.95
    2.345类型为System.Single,tostring("0.00")计算结果为2.35
    2.355类型为System.Single,tostring("0.00")计算结果为2.36
    4.445类型为System.Decimal,tostring("0.00")计算结果为4.45
    4.435类型为System.Decimal,tostring("0.00")计算结果为4.44



    2.345类型为System.Single,Math.Round计算结果为2.35
    2.355类型为System.Single,Math.Round计算结果为2.36
    2.345类型为System.Single,Math.Round附加,计算结果为2.35
    2.355类型为System.Single,Math.Round附加,计算结果为2.36

    数字6.345,Math.Round计算结果为6.34
    数字6.355,Math.Round计算结果为6.36
    数字6.335,Math.Round计算结果为6.34
    数字6.345,Math.Round附加,计算结果为6.35
    数字6.355,Math.Round附加,计算结果为6.36
    数字6.335,Math.Round附加,计算结果为6.34

    526.955类型为System.Double,Math.Round计算结果为526.96
    526.945类型为System.Double,Math.Round计算结果为526.95
    526.935类型为System.Double,Math.Round计算结果为526.93

    526.955类型为System.Double,Math.Round附加,计算结果为526.96
    526.945类型为System.Double,Math.Round附加,计算结果为526.95
    526.935类型为System.Double,Math.Round附加,计算结果为526.93

    4.445类型为System.Decimal,Math.Round计算结果为4.44
    4.435类型为System.Decimal,Math.Round计算结果为4.44
    4.445类型为System.Decimal,Math.Round附加,计算结果为4.45
    4.435类型为System.Decimal,Math.Round附加,计算结果为4.44

    总结

    用tostring("0.00")对float,double,decimal都实现四舍五入

    用Math.Round对float实现四舍五入,decimal附加MidpointRounding.AwayFromZero才参数能实现,double都不适用

    总结为四舍五入问题:要么用toString("0.00"),要么用 Math.Round((decimal)num,2,MidpointRounding.AwayFromZero)

  • 相关阅读:
    『Argparse』命令行解析
    『MXNet』专题汇总
    用.NET开发通用Windows App
    ASP.NET 5探险(6):升级ASP.NET 5到beta6
    使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台
    Visual Studio 2015将在7月20号RTM
    VS2015上又一必备免费插件:Refactoring Essentials
    ASP.NET 5探险(5):利用AzureAD实现单点登录
    Visual Studio Code升级到0.5,提供对ES6的更好支持
    ASP.NET 5探险(4):如何把ASP.NET 5从beta4升级到beta5
  • 原文地址:https://www.cnblogs.com/wwkk/p/7102730.html
Copyright © 2020-2023  润新知