通过百分比计算获得不正确的小数位



我正在对 2 个数字进行计算,如下所示:

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

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

数字

十进制位 = 2 :四舍五入也将在小数点后 2 位后从这个位置取,即四舍五入应从 593 渲染 98.86

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

有人能用这个取悦我吗?

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

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

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

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

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

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

除了使用Math.Round而不是Math.Truncate,以获得您想要的结果。

最新更新