四舍五入问题(粗糙版)

  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)

原文地址:https://www.cnblogs.com/wwkk/p/7102730.html