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,以获得所需的结果。