例如,如果我的小数为10.205并且我减去了它的0.305,那么它应该显示为09.900而不是9.9,因为之前和之后的所有不必要的数字应该变为零。
所以也许有一个方法可以计算10205 - 305(= 9900),然后返回转换后的十进制字符串" 09.900"。
如何始终使用相同数量的数字。
答案 0 :(得分:3)
如果我写这段代码:
decimal x = 10.205m;
decimal y = 0.305m;
decimal z = x - y;
Console.WriteLine(z);
输出为9.900
。无需做任何特别的事情。
现在,如果我对上述decimal.GetBits(z)
z
int[] { 9900, 0, 0, 196608 }
,我会z
。
但是,如果我将z = 9.9
重新定义为decimal.GetBits(z)
并执行int[] { 99, 0, 0, 65536 }
,我会z = 9.9
。
数组中的第四个值是小数位数(如果除以65535,则可以找出多少位数。)
所以,2 * 65536
我得到1位小数(65536/65536 == 1)。要将它更改为3位小数,我将int[] { 9900, 0, 0, 196608 }
添加到第四个整数,但我还需要将第一个整数乘以100(或10 ^ 2)。然后我得到这些位:z = new decimal(new int[] { 99 * 10 * 10, 0, 0, 65536 + 2 * 65536 });
。
然后你可以Console.WriteLine(z)
。
然后当我9.900
时,我得到make
。
答案 1 :(得分:2)
我构建了这个扩展方法:
public static decimal getDecimalFixed(decimal amount, decimal subtract)
{
var parts = amount.ToString().Split('.');
decimal sum = amount - subtract;
// get's a string of zeros using the same amount of digits
string part1zeros = new String('0', parts[0].Length);
string part2zeros = new String('0', parts[1].Length);
// decimal format ex: ToString("000.0000")
return Convert.ToDecimal(sum.ToString(part1zeros + "." + part2zeros));
}