public static string ToHex(this decimal num)
{
StringBuilder sb = new StringBuilder();
while (num != 0)
{
if ((num % 16) < 10)
sb.Append((num % 16).ToString());
else if (num % 16 == 10)
sb.Append("A");
else if (num % 16 == 11)
sb.Append("B");
else if (num % 16 == 12)
sb.Append("C");
else if (num % 16 == 13)
sb.Append("D");
else if (num % 16 == 14)
sb.Append("E");
else if (num % 16 == 15)
sb.Append("F");
num = ((num / 16) - ((num / 16) % 1));
}
return sb.ToString().Reverse();
}
所以在行num =((num / 16) - ((num / 16)%1));由于某种原因((num / 16)%1)不执行。
我将1354153插入num并且在计算num为84634.5625(我在调试器模式下检查过)时((num / 16)%1)应该&#34;删除&#34;分数。
为什么不执行它,如果它为什么结果出错呢?
我是初学者,如果这是一个愚蠢的问题,那就很抱歉。
答案 0 :(得分:0)
不太确定为什么模数不起作用,但是不会使用Math.Floor
来实现你想要做的更简单的方法?
答案 1 :(得分:0)
奇怪的是,我得到的结果与你不同。但是,这一行存在一个问题:
sb.Append((num % 16).ToString());
由于num
为decimal
,根据您的文化,您可能会得到不同的结果,但它可能会返回9.000
之类的内容。当您将其添加到字符串时,会导致问题。
如果您实际输入的数字不是整数,那么您的代码也无效。
此外,您的最后一行应该是:
return new string(sb.ToString().Reverse().ToArray());
否则它不会编译。
这一切让我相信你实际上没有调试甚至测试过这个版本的代码。如果这是一个练习,我建议用int
而不是小数来尝试。如果没有,请使用standard format strings,如下所示:
((int)1354153m).ToString("X")