Исключение переполнения в C# для преобразования числа с плавающей запятой в десятичное
Я получаю исключение переполнения, когда 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...
1 ответ
Вы используете или операторы, где вы должны использовать и операторы. Любое число с плавающей запятой, которое является NaN, бесконечным, > decimal.MaxValue или Вот что вам нужно для обеспечения: Вот что вы на самом деле гарантируете: Последнее всегда верно для любого данного числа с плавающей запятой, даже тех, которые находятся за пределами допустимых границ десятичного типа.myFloat < (float)decimal.MaxValue && myFloat > (float)decimal.MinValue
myFloat < (float)decimal.MaxValue || myFloat > (float)decimal.MinValue