【问题标题】:Overflow exception in C# for converting float number to decimalC# 中用于将浮点数转换为十进制的溢出异常
【发布时间】:2014-10-27 01:53:23
【问题描述】:

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

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

【问题讨论】:

  • 有什么异常?

标签: c# bitconverter


【解决方案1】:

您在应该使用 and 运算符的地方使用 or 运算符。任何浮点数都可能是 NaN、无限、> decimal.MaxValue 或

以下是您需要确保的:

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

这是你真正要确保的:

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

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

【讨论】:

    猜你喜欢
    • 2014-03-01
    • 2015-12-28
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2010-12-08
    相关资源
    最近更新 更多