使用百分比计算时得到不正确的小数位数

10 浏览
0 Comments

使用百分比计算时得到不正确的小数位数

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

No1 = 263
No2 = 260
小数位数 = 2
预期输出 = 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:保留小数点后2位

decimalPlaces = 2:四舍五入也是从小数点后2位开始,即应该从593四舍五入为98.86

No1 = 117
No2 = 120
小数位数 = 2
预期输出 = 97.50

谁能帮我解决这个问题?

0
0 Comments

问题出现的原因是整数除法。当你将一个整数除以另一个整数时,结果将会是一个整数。为了得到正确的小数位数,你需要将其中一个值(至少一个)转换为十进制。

解决方法是将数值转换为十进制后再进行计算,并使用Math.Round()函数将结果四舍五入到指定的小数位数。

当No2=2,No1=5时,使用decimalPlaces=2进行计算,得到的结果是40.0,而不是期望的40.00。

从数学上讲,40和40.00之间没有区别。不要将小数的值与它在屏幕或纸上的显示方式混淆。

如果你的问题是显示的目的,可以使用string.Format()函数来格式化输出结果,具体的用法可以参考stackoverflow上的相关问题:

stackoverflow.com/questions/6951335/…

0
0 Comments

在这段代码中,问题的根源是在进行百分比计算时得到了错误的小数位数。解决这个问题的方法是改变括号的位置,并使用Math.Round代替Math.Truncate。

在原始代码中,除法运算是在转换为小数之前进行的,所以只转换了除法的整数结果。为了得到期望的结果,我们需要改变括号的位置,将No2 * 100先转换为小数,然后再进行除法运算。

另外,为了得到期望的结果,还需要使用Math.Round而不是Math.Truncate。Math.Round可以将小数四舍五入到指定的位数,这样我们就可以得到正确的小数位数。

以下是修改后的代码:

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

通过以上的修改,我们可以得到正确的小数位数的百分比计算结果。

0