2012-02-01 39 views
0

我想摄氏转换在Visual Studio C#ASP.net web表单2010ASP.NET转换C至F C#VS 2010 ...计算误差

我使用的功能为华氏执行转换,包括这行代码:

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

它不计算吧!如果我把摄氏度= 16,我得到48

我试着做同样的PHP - 我得到60,这是我假设得到的。

任何想法可能是错在这里?

回答

5

你看到9/5整数算法进行评估,给出值1。所以基本上你的表情是只是增加16

你想要的东西,如:

// Force the 9.0/5.0 to be evaluated as a double 
return (celsius * (9.0/5.0)) + 32; 

或者你可以只通过改变评价分组留整数运算内

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

注意,这将永远一轮 - 如果你想mathemtically最接近的值,你可能想仍然使用浮点执行算术,然后应用舍入,例如

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

注意,这将使用银行家舍(圆形连)为两个整数之间的中点。

+0

对于第二种解决方案,您将得到比前一个解答更接近的答案 - 但如果五倍的摄氏温度不能被九整除,它仍然会丢失任何小数分量。如果你想要一个整数返回类型,使用浮点算术后跟一个舍入操作似乎更可取,并且比简单的截断稍微精确一些。尽管我的回答比详细的+1更详细。 – acoffman 2012-02-01 20:42:12

+1

@thecoffman:可能。取决于OP的要求,我想。将编辑添加一个笔记。 – 2012-02-01 20:43:19

+0

Doh!超级感谢所有。 – user1121487 2012-02-01 20:53:27

1

你得到,因为整数除法这个结果。 9和5是整数 - 不是浮点数/双精度/小数或其他能够存储小数部分的类型。 9/5结果1与小数部分离开的 - 而这也正是你的48是来自。尝试9.0/5.0,你应该看到不同的结果。

0

我猜celsiusint和9/5正在执行整数运算。

而是尝试:

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

检查你的数据类型 - 让9,5和32个双打;它们被C#自动假定为整数。