我正在对以下两个数字进行计算:
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
有人可以请我这个吗?
答案 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之外,还可以获得所需的结果。