将double转换为float而不使用Infinity

Ted*_*sen 28 c# floating-point double types

我用旧的把双倍换成漂浮物float myFloat = (float)myDouble.

然而,这有时会导致"无限",这对我正在进行的进一步处理不利.只要它指向一般方向作为原始数字(我要转换的所有数字的相对数量'强度'必须保持),我对损失没问题.

如何将float转换为double并避免Infinity?

背景:
我正在从wav/mic读取一个字节流,将其转换为float,转换为double,通过FFT计算运行它(这是需要的double),现在我想要它回来float(将数据存储在32位图像容器中) ).

Jon*_*eet 34

因此,如果该值大于float.MaxValue,您是否满意float.MaxValue?这将有效地"削减"价值观.如果没关系,这很容易:

float result = (float) input;
if (float.IsPositiveInfinity(result))
{
    result = float.MaxValue;
} else if (float.IsNegativeInfinity(result))
{
    result = float.MinValue;
}
Run Code Online (Sandbox Code Playgroud)


Bry*_*anJ 15

您可以使用.NET方法Convert.ToSingle().例如:

float newValue = Convert.ToSingle(value);
Run Code Online (Sandbox Code Playgroud)

根据MSDN文档:

将指定值转换为单精度浮点数.

更新: 经过进一步审核,Convert.ToSingle(Double.MaxValue)结果为Infinity,因此您仍需检查无限性,如Jon Skeet所述.