转换十进制但保留与原始 C# 相同数量的数字
Convert Decimal but stay with same amount of Digits as original C#
例如,如果我有一个小数点 10.205,我从中减去 0.305,那么它应该显示为 09.900 而不是 9.9,因为前后所有不需要的数字都应该变成零。
因此,如果有一种方法可以计算 10205 - 305 (= 9900),然后 return 转换后的十进制字符串“09.900”。
我怎样才能始终保持相同数量的数字。
我构建了这个扩展方法:
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));
}
如果我写这段代码:
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 }
.
数组中的第四个值是小数位数(除以65535可以得出多少)。
因此,z = 9.9
我得到小数点后一位 (65536 / 65536 == 1)。要将其更改为小数点后 3 位,我将 2 * 65536
添加到第四个整数,但我还需要将第一个整数乘以 100(或 10 ^ 2)。然后我得到这些位:int[] { 9900, 0, 0, 196608 }
.
那么你可以z = new decimal(new int[] { 99 * 10 * 10, 0, 0, 65536 + 2 * 65536 });
.
然后当我 Console.WriteLine(z)
我得到 9.900
.
例如,如果我有一个小数点 10.205,我从中减去 0.305,那么它应该显示为 09.900 而不是 9.9,因为前后所有不需要的数字都应该变成零。
因此,如果有一种方法可以计算 10205 - 305 (= 9900),然后 return 转换后的十进制字符串“09.900”。
我怎样才能始终保持相同数量的数字。
我构建了这个扩展方法:
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));
}
如果我写这段代码:
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 }
.
数组中的第四个值是小数位数(除以65535可以得出多少)。
因此,z = 9.9
我得到小数点后一位 (65536 / 65536 == 1)。要将其更改为小数点后 3 位,我将 2 * 65536
添加到第四个整数,但我还需要将第一个整数乘以 100(或 10 ^ 2)。然后我得到这些位:int[] { 9900, 0, 0, 196608 }
.
那么你可以z = new decimal(new int[] { 99 * 10 * 10, 0, 0, 65536 + 2 * 65536 });
.
然后当我 Console.WriteLine(z)
我得到 9.900
.