1

Convert.ToDecimal(float number here)调用时出现溢出异常。我正在读取字节字符串并希望将字节数组转换为十进制数。

byte[] hexbyte = {45, 6, 7, 29};
float myFloat = BitConverter.ToSingle(hexbyte, 0);

//Make sure the float can be converted to decimal
if (!float.IsNaN(myFloat) ||
    !float.IsInfinity(myFloat) ||
    myFloat < (float)decimal.MaxValue ||
    myFloat > (float)decimal.MinValue)
{
    try {
        myFloatD = Convert.ToDecimal(myFloat);
    }
    catch (Exception ex)
    {
        Debugger.Log(0, "1", ex.ToString());
        return 0;
    }
}
else
    return 0;

myFloat = (float)Math.Round(myFloatD, 2); // 1 indicates the decimal places

即使我设置约束来检查浮点数是否太大/太小/到无穷大以进行转换,代码仍然会以捕获异常结束...

4

1 回答 1

2

您在应该使用 and 运算符的地方使用 or 运算符。NaN、无限、> decimal.MaxValue 或 < decimal.MinValue 的任何浮点数都可以通过您的 if 标准,只要它不是同时满足所有这些条件。

以下是您需要确保的:

myFloat < (float)decimal.MaxValue && myFloat > (float)decimal.MinValue

以下是您实际要确保的内容:

myFloat < (float)decimal.MaxValue || myFloat > (float)decimal.MinValue

后者对于任何给定的浮点数总是正确的,即使是在十进制类型的有效范围之外的浮点数。

于 2014-10-27T02:07:17.877 回答