使用百分比计算得到错误的小数位

时间:2018-03-14 14:24:01

标签: c#

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

No1 = 263
No2 = 260
Decimal places = 2
Expected output = 98.86

代码:

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

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

decimalPlaces = 2:舍入也将在2位小数后从此位置取得,即舍入应取自593渲染98.86

No1 = 117
No2 = 120
decimal places = 2
Expected Output = 97.50

有人可以请我这个吗?

2 个答案:

答案 0 :(得分:1)

问题是整数除法。将整数除以整数时,您将得到一个整数。您需要将值(至少其中一个)转换为小数

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

答案 1 :(得分:0)

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

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

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

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

除了使用Math.Round而不是Math.Truncate之外,还可以获得所需的结果。