转换十进制但保持与原始C#相同的数字量

时间:2017-11-27 21:18:14

标签: c# decimalformat

例如,如果我的小数为10.205并且我减去了它的0.305,那么它应该显示为09.900而不是9.9,因为之前和之后的所有不必要的数字应该变为零。

所以也许有一个方法可以计算10205 - 305(= 9900),然后返回转换后的十进制字符串" 09.900"。

如何始终使用相同数量的数字。

2 个答案:

答案 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));
}