C#中的溢出异常用于将浮点数转换为十进制

时间:2014-10-27 01:53:23

标签: c# bitconverter

调用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

即使我设置约束来检查浮动是否太大/太小/无限转换,代码仍然会在捕获异常时结束......

1 个答案:

答案 0 :(得分:2)

您正在使用或运营商应该使用的地方和运营商。任何NaN,无限,&gt;的浮子都是可能的。 decimal.MaxValue或&lt; decimal.MinValue传递你的if标准,只要它不是所有这些东西同时进行。

以下是您需要确保的内容:

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

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

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

对于任何给定的浮点数,后者始终为true,即使是超出十进制类型有效范围的浮点数。