ASP.NET将C转换为F. C#VS 2010 ...计算错误

use*_*487 0 c# asp.net visual-studio-2010

我正在尝试使用Visual Studio 2010中的C#ASP.net网络表单将摄氏温度转换为华氏温度.

我正在使用函数来执行转换,包括以下代码行:

return (celsius * (9 / 5)) + 32;

它不算正确!如果我输入摄氏度= 16,我得到48.

我已经尝试在PHP中做同样的事情 - 我得到60,这是我想要得到的.

知道这里有什么不对吗?

Jon*_*eet 5

您将看到9 / 5整数算术进行求值,给出值1.所以基本上您的表达式只是添加16.

你想要的东西:

// Force the 9.0 / 5.0 to be evaluated as a double
return (celsius * (9.0 / 5.0)) + 32;
Run Code Online (Sandbox Code Playgroud)

或者只需更改评估分组,您就可以保持整数运算:

return ((celsius * 9) / 5) + 32;
Run Code Online (Sandbox Code Playgroud)

如果您的输入和预期输出是整数,我会选择后者.显然现在有更大的溢出风险...但只有非常高的温度:)

请注意,这将始终向下舍入- 如果您想要达到最接近的值,您可能希望仍然使用浮点执行算术,然后应用舍入,例如

return (int) (Math.Round((celsius * (9.0 / 5.0)) + 32));
Run Code Online (Sandbox Code Playgroud)

请注意,这将使用银行家的舍入(舍入到偶数)来表示两个整数之间的中点.