模数计算不执行

时间:2015-01-27 22:59:48

标签: c#

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;分数。

为什么不执行它,如果它为什么结果出错呢?

我是初学者,如果这是一个愚蠢的问题,那就很抱歉。

2 个答案:

答案 0 :(得分:0)

不太确定为什么模数不起作用,但是不会使用Math.Floor来实现你想要做的更简单的方法?

答案 1 :(得分:0)

奇怪的是,我得到的结果与你不同。但是,这一行存在一个问题:

sb.Append((num % 16).ToString());

由于numdecimal,根据您的文化,您可能会得到不同的结果,但它可能会返回9.000之类的内容。当您将其添加到字符串时,会导致问题。

如果您实际输入的数字不是整数,那么您的代码也无效。

此外,您的最后一行应该是:

return new string(sb.ToString().Reverse().ToArray());

否则它不会编译。

这一切让我相信你实际上没有调试甚至测试过这个版本的代码。如果这是一个练习,我建议用int而不是小数来尝试。如果没有,请使用standard format strings,如下所示:

((int)1354153m).ToString("X")