C#.Net Float 精度問題…

  • 8731
  • 0
  • 2009-10-27

近日在計算線上服務的會員收益,
發現計算的精度居然大不相同… XD
有的算到小數點第三位, 有的算到第四位,
有的還算到 ±1.5 × 10-45 版本一堆…

近日在計算線上服務的會員收益,

發現計算的精度居然大不相同… XD

有的算到小數點第三位,  有的算到第四位,

有的還算到 ±1.5 × 10-45 版本一堆…

目前想到的解法有二

1. 無條件捨去

        /// <summary>
        /// 數值轉換
        /// </summary>
        /// <param name="Value">數值</param>
        /// <param name="position">小數點位數</param>
        /// <returns></returns>
        private static float ConvertValue(float Value, int position)
        {
            string ConvertPosition = "#";
            if (position > 0)
            {
                ConvertPosition += ".";
                for (int i = 2; i < position; i++)
                    ConvertPosition += "#";
                ConvertPosition += "0";
            }
            return Single.Parse(Value.ToString(ConvertPosition));
        }

 

 

2. 四捨五入

        /// <summary>
        /// 數值轉換
        /// </summary>
        /// <param name="Value">數值</param>
        /// <param name="position">小數點位數</param>
        /// <returns></returns>
        private static float ConvertValue(float Value, int position)
        {
            Value = Value * (10 ^ position);
            if (Convert.ToInt32(Value.ToString().Substring(Value.ToString().IndexOf('.') + 1, 1)) > 4)
                Value++;
            Value = Value / (10 ^ position);
 
            string ConvertPosition = "#";
            if (position > 0)
            {
                ConvertPosition += ".";
                for (int i = 2; i < position; i++)
                    ConvertPosition += "#";
                ConvertPosition += "0";
            }
            return Single.Parse(Value.ToString(ConvertPosition));
        }

 

 

網路上有看到 Math.Round(), 不過拍勢…這個叫五捨六入…殘念~