不使用Infinity将double转换为float我使用旧的floatmyFloat=(float)myDouble将double转换为float。然而,这有时会导致“无穷大”,这对我正在进行的进一步处理不利。只要它指向原始数字的大体方向(我要转换的所有数字的相对大小“强度”必须保持不变),我就可以接受损失。如何将float转换为double并避免无穷大?背景:我正在从wav/mic读取字节流,将其转换为浮点数,将其转换为双精度数,通过FFT计算运行它(需要双精度数),现在我想将其返回到一个浮点数(将数据存储在32位中间)图像容器中)。因此,如果该值大于float.MaxValue,您是否对它只是float.MaxValue感到满意?这将有效地“削减”价值。如果没关系,很简单:floatresult=(float)input;如果(float.IsPositiveInfinity(result)){result=float.MaxValue;}elseif(float.IsNegativeInfinity(result)){result=float.MinValue;您可以使用.NET方法Convert.ToSingle()。例如:floatnewValue=Convert.ToSingle(value);根据MSDN文档:将指定值转换为单精度浮点数。更新:经过进一步审查,Convert.ToSingle(Double.MaxValue)产生无穷大,因此您仍然需要检查无穷大,就像JonSkeet的回答中所做的那样。如果计算得出的值超出了要存储的类型的范围,则需要执行以下三项操作之一:抛出异常它发生的任何计算无效都会将结果与特定值挂钩(即使它没有超出数字类型的范围,也会被挂钩)。例如,传感器组件可能具有两个时间平均输入X和Y,其“值”为(X*X)/(Y*Y)-(Y*Y)/(X*X)。如果输入有噪声,一个输入上的低值可能会被读取为异常低的值。如果测量将用于控制反馈回路,并且“实际”值不会超过+/-1000000.0,那么将值固定在该范围内可能比让控制回路看到一个完全疯狂的计算读数要好(X或Y是可能的最小非零值)。在很多应用中,第三种方法是正确的。但是,在这种情况下,如果将读数固定为数百万的值有意义,则计算结果是1,000,001还是1E+39(浮点数+INF)都无关紧要。无论哪种情况,它都应该是一百万。使用此函数以上为C#学习教程:不使用Infinity分享的全部内容将double转float。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——publicstaticfloatDoubleToFloat(doubledValue){if(float.IsPositiveInfinity(Convert.ToSingle(dValue))){returnfloat.最大值;}if(float.IsNegativeInfinity(Convert.ToSingle(dValue))){returnfloat.MinValue;}返回Convert.ToSingle(dValue);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
