I\'m converting double to float using ye old float myFloat = (float)myDouble
.
This does however sometimes result in \"Infinity\", which is not good for
You can use the .NET method Convert.ToSingle()
. For example:
float newValue = Convert.ToSingle(value);
According to the MSDN Documentation:
Converts a specified value to a single-precision floating-point number.
Update:
Upon further review, Convert.ToSingle(Double.MaxValue)
results in Infinity so you still have to check for infinity as done in Jon Skeet's answer.
If a calculation result of a calculation exceeds the range of the type you're storing it in, it will be necessary to do one of three things:
There are many applications where the third approach would be the right one. In such situations, however, if it would make sense to peg the reading at a value of a million, then it shouldn't matter whether the computation results in a value of 1,000,001 or 1E+39 (floating-point +INF). One should peg to a million in either case.
Use this Function
public static float DoubleToFloat(double dValue)
{
if (float.IsPositiveInfinity(Convert.ToSingle(dValue)))
{
return float.MaxValue;
}
if (float.IsNegativeInfinity(Convert.ToSingle(dValue)))
{
return float.MinValue;
}
return Convert.ToSingle(dValue);
}
So if the value is greater than float.MaxValue
, are you happy for it to just be float.MaxValue
? That will effectively "clip" the values. If that's okay, it's reasonably easy:
float result = (float) input;
if (float.IsPositiveInfinity(result))
{
result = float.MaxValue;
} else if (float.IsNegativeInfinity(result))
{
result = float.MinValue;
}