调用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
即使我设置约束来检查浮动是否太大/太小/无限转换,代码仍然会在捕获异常时结束......
答案 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,即使是超出十进制类型有效范围的浮点数。