关于c#:使用百分比计算获取不正确的小数位数


Getting incorrect decimal places with percentage calculation

本问题已经有最佳答案,请猛点这里访问。

我正在对以下两个数字进行计算:

1
2
3
4
No1 = 263
No2 = 260
Decimal places = 2
Expected output = 98.86

代码:

1
2
3
4
5
6
7
8
9
10
11
12
decimal output = 0;
 int decimalPlaces = 2;
 if (No1 > 0)
        output = ((100 * Convert.ToDecimal(((No2 * 100) / No1))) / 100);
 output = TruncateDecimal(output, decimalPlaces); // 98

    public static decimal TruncateDecimal(decimal value, int precision)
    {
        decimal step = (decimal)Math.Pow(10, precision);
        decimal tmp = Math.Truncate(step * value);
        return tmp / step;
    }

以上代码表示输出=98

当我在计算器中除以263/260,得到0.988593。

小数位数=2:小数位数后取2位

小数位数=2:四舍五入也将在两位小数后从该位置取整,即从593取整,呈现98.86

1
2
3
4
No1 = 117
No2 = 120
decimal places = 2
Expected Output = 97.50

有人能请我用这个吗?


问题是整数除法。当你用一个整数除以一个整数时,你会得到一个整数。您需要将值(至少其中一个)转换为十进制

1
output = Math.Round((100 * ((decimal)No2/(decimal)No1)),2);


尝试更改一些括号位置,从:

1
output = ((100 * Convert.ToDecimal(((No2 * 100) / No1))) / 100);

1
output = ((100 * ((Convert.ToDecimal(No2 * 100) / No1))) / 100);

在代码中,除法是在十进制转换之前计算的,因此您只转换除法的整数结果。

此外,使用math.round而不是math.truncate,以获得所需的结果。