C# 使用C从16位音频采样值计算dBFS值时输出不精确#

C# 使用C从16位音频采样值计算dBFS值时输出不精确#,c#,math,audio,audio-processing,decibel,C#,Math,Audio,Audio Processing,Decibel,我使用c#从16位波形文件样本(-32768到+32767)计算dBFS值,如下所示: int sampleValue = -32700; double dBFSvalue = 20 * Math.Log10(Math.Abs(sampleValue) / 32768); 但是,当我尝试打印dBFS值时,sampleValue为32768时会得到“0”,而sampleValue的任何其他值都会得到“-infinity” 这与显示Double类型有关吗? 我应该如何转换数字以“-60.5 dB

我使用c#从16位波形文件样本(-32768到+32767)计算dBFS值,如下所示:

int sampleValue = -32700;

double dBFSvalue = 20 * Math.Log10(Math.Abs(sampleValue) / 32768);
但是,当我尝试打印dBFS值时,sampleValue为32768时会得到“0”,而sampleValue的任何其他值都会得到“-infinity”

这与显示Double类型有关吗? 我应该如何转换数字以“-60.5 dBFS”的形式正确显示它


谢谢。

将第二行代码替换为

double dBFSvalue = 20 * Math.Log10(Math.Abs(sampleValue) / 32768.0);

您需要
.0
将其计算为浮点数。否则,它将计算为整数,括号中的项将计算为0。

将第二行代码替换为

double dBFSvalue = 20 * Math.Log10(Math.Abs(sampleValue) / 32768.0);

您需要
.0
将其计算为浮点数。否则,它将被计算为整数,括号中的项将被计算为0。

谢谢!就这样。我以前犯过那个错误,我似乎总是忘记。谢谢!就这样。我以前犯过那个错误,我似乎总是忘记。