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

本文关键字:错误 结果 转换 十进制 之间 十六进制 | 更新日期: 2023-09-27 17:51:14

我正在尝试手动转换十进制和十六进制之间的数字。我让它为正数工作,并将负十进制转换为"负"十六进制,但我无法将其从"负"十六进制转换为负十进制。

下面是我试图使用的代码:

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变成fffffffffffffffff6,但当我试图把它变成十进制,我得到1.15292150460685E+18,我不能做任何方程。

有谁知道解决这个问题的方法吗?

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

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