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

ASP.NET将C转换为F.C#VS 2010。。。计算误差,c#,asp.net,visual-studio-2010,C#,Asp.net,Visual Studio 2010,我试图在VisualStudio2010中使用C#ASP.net web表单将摄氏温度转换为华氏温度 我正在使用函数执行转换,包括以下代码行: 返回(摄氏度*(9/5))+32 算错了!如果我输入摄氏度=16,我得到48 我也尝试过用PHP做同样的事情,-我得到了60,这是我应该得到的 你知道这里有什么问题吗?你得到这个结果是因为整数除法。9和5是整数-不是浮点数/双精度数/小数或其他能够存储小数部分的类型9/5导致1中的分数部分被删除,这就是48的来源。尝试9.0/5.0,您会看到不同的结果。

我试图在VisualStudio2010中使用C#ASP.net web表单将摄氏温度转换为华氏温度

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

返回(摄氏度*(9/5))+32

算错了!如果我输入摄氏度=16,我得到48

我也尝试过用PHP做同样的事情,-我得到了60,这是我应该得到的


你知道这里有什么问题吗?

你得到这个结果是因为整数除法。9和5是整数-不是浮点数/双精度数/小数或其他能够存储小数部分的类型
9/5
导致
1
中的分数部分被删除,这就是48的来源。尝试
9.0/5.0
,您会看到不同的结果。

您得到这个结果是因为整数除法。9和5是整数-不是浮点/双精度/小数或其他能够存储数字小数部分的类型
9/5
导致
1
中的分数部分被删除,这就是48的来源。尝试
9.0/5.0
,您将看到不同的结果。

您将看到
9/5
在整数算术中求值,值为1。基本上你的表达式就是加16

你想要的是:

// Force the 9.0 / 5.0 to be evaluated as a double
return (celsius * (9.0 / 5.0)) + 32;
或者,只需更改计算分组,即可保持整数运算:

return ((celsius * 9) / 5) + 32;
如果您的输入和预期输出是整数,我会选择后者。显然,现在有更大的溢出风险。。。但仅在温度非常高的情况下:)

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

return (int) (Math.Round((celsius * (9.0 / 5.0)) + 32));

请注意,这将对两个整数之间的中点使用银行家四舍五入(从四舍五入到偶数)。

您将看到在整数算术中计算
9/5
,给出值1。基本上你的表达式就是加16

你想要的是:

// Force the 9.0 / 5.0 to be evaluated as a double
return (celsius * (9.0 / 5.0)) + 32;
或者,只需更改计算分组,即可保持整数运算:

return ((celsius * 9) / 5) + 32;
如果您的输入和预期输出是整数,我会选择后者。显然,现在有更大的溢出风险。。。但仅在温度非常高的情况下:)

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

return (int) (Math.Round((celsius * (9.0 / 5.0)) + 32));

请注意,这将对两个整数之间的中点使用银行家四舍五入(从四舍五入到偶数)。

我猜
celsius
是一个
int
,而9/5是一个整数

相反,请尝试:

return ((double)celsius * (9.0 / 5.0)) + 32.0;

我猜
摄氏度
是一个
整数
,而9/5是一个整数

相反,请尝试:

return ((double)celsius * (9.0 / 5.0)) + 32.0;

检查您的数据类型-使9,5和32双;C#会自动将它们假定为int。

检查您的数据类型-使9、5和32加倍;C#会自动将它们假定为整数。

对于第二个解决方案,您将得到比前一个更接近的答案-但如果五倍于您的摄氏温度不能被九平均整除,它仍然会丢失任何分数分量。如果您想要整数返回类型,那么使用浮点运算和舍入运算似乎比简单的截断更可取,也更精确+“谢谢你说得比我的回答更详细。”狱警:可能吧。我想这取决于OP想要什么。将进行编辑以添加注释。对于第二个解决方案,您将得到比前一个更接近的答案-但如果五倍于您的摄氏温度不能被九平均整除,它仍将丢失任何分数分量。如果您想要整数返回类型,那么使用浮点运算和舍入运算似乎比简单的截断更可取,也更精确+“谢谢你说得比我的回答更详细。”狱警:可能吧。我想这取决于OP想要什么。将编辑以添加注释。