问题是我有一个表示华氏单位的double

var fahrenheit = 80.0;


要将其转换为摄氏温度,请使用以下公式

var celsius = (fahreheit - 32.0) / 1.8;


它给出一个数字26.666667(假设26.67

当我转换回来

var fahrenheitAgain = 1.8 * celsius + 32.0;


如果我有2个小数位,它将给出一个较大的数字80.006,该数字会四舍五入为80.01。但是我如何获得与以前相同的价值?

是否有已知的解决方案来回转换任何双精度值以始终具有相同的值?

最佳答案

(假设26.67


不要吧。

您不能以“假设”开始计算,而期望结果是准确的。实际上,26.67°C恰好是80.006°F(无舍入误差),因此从那一点开始,没有任何办法可以得到更精确的结果。

不要做“让我们说”。尽可能精确地存储结果,与显示结果的代码分开,仅在最后一刻才显示。

仍然会存在误差,因为有些值不能精确地适合double(或decimal或任何其他此类类型),但是您会受到它们的影响较少,并且通常会赢得效果即使他们在那里也根本不可见。

关于c# - 华氏温度和摄氏温度之间的转换,反之亦然,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30487855/

10-14 22:07