在负十六进制和负十进制之间转换会产生错误的结果

时间:2014-03-20 14:54:03

标签: c# winforms visual-studio hex decimal

我正在尝试手动转换十进制和十六进制之间的数字。我让它用于正数并将负小数转换为“负数”'十六进制,但我无法将其从“否定”转换为“十二进制”。十六进制到负十进制。

以下是我尝试使用的代码:

private string HexToDecimal(char[] toConvert)
    {
        if (negativeValue)
        {
            negativeValue = false;

            long var = Convert.ToInt64(HexToDecimal(ResultLabel.Text.ToCharArray()));

            long valueToHex = var - (long)Math.Pow(16, 15);

            return ResultLabel.Text = valueToHex.ToString();
        }
        else
        {
            double total = 0;
            //Convert hex to decimal

            HexOrDecimalLabel.Text = "Decimal";

            //TODO: create int array from indivial int
            char[] charArray = toConvert;
            long[] numberArray = HexSwitchFunction(charArray);

            //TODO: reverse array
            Array.Reverse(numberArray);

            //loop array, times value by 16^i++, adding to total. This is the method   used to convert hex to decimal
            double power = 0;
            foreach (int i in numberArray)
            {
                total += (i * (Math.Pow(16, power)));
                power++;
            }

            //set the result label to total

            isHex = false;
            AllowHexButtons();

            return ResultLabel.Text = total.ToString();
        }
    }

例如,我可以将-10转换为FFFFFFFFFFFFFFF6,但是当我试图将其转换为十进制时,我得到1.15292150460685E + 18,我无法用它做任何方程式。

有没有人知道解决这个问题的方法?

1 个答案:

答案 0 :(得分:0)

这是因为double对负数使用不同的表示法。将totalpower的类型从double更改为long可以解决问题。