近日在計算線上服務的會員收益,
發現計算的精度居然大不相同… 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(), 不過拍勢…這個叫五捨六入…殘念~