C#,double,decimalデータ型指定した小数点以下の桁数を切り捨てて保持

4033 ワード

  ASP.NET in C#      ,     ,C#                 。
, :
/// <summary>

///               

/// </summary>

/// <param name="d">      </param>

/// <param name="s">    ,s    0,    28</param>

/// <returns></returns>

public static decimal ToFixed(decimal d, int s)

{

    decimal sp = Convert.ToDecimal(Math.Pow(10, s));



    if (d < 0)

        return Math.Truncate(d) + Math.Ceiling((d - Math.Truncate(d)) * sp) / sp;

    else

        return Math.Truncate(d) + Math.Floor((d - Math.Truncate(d)) * sp) / sp;

}
  • double decimal ToString("#.##")          ;
  •    System.Math  Round(decimal d, int decimals)  ,         “       ”;
  •    System.Math  Round(decimal d, int decimals, MidpointRounding mode)           ,         (5);
  •    System.Math   :http://msdn.microsoft.com/zh-cn/library/system.math_methods(v=vs.80)

    “ ..” Bug, 1 3 。
    ,double decimal 。
    “ , , 。” :http://msdn.microsoft.com/zh-cn/library/system.double.aspx
    ((9.6-9)==0.6) false, (9.6-9) :0.59999999999999964;
    ((109.6-100)==(9.6-9)) false, 。。。
    double ,double decimal , ( , double, ToFixed(9.6, 1) 9.5), , decimal double 。。。 , , double !
    decimal ( ), 。。。
    double decimal.MinValue decimal.MaxValue , decimal, 。。。 !~!~!~