我想摄氏转换在Visual Studio C#ASP.net web表单2010ASP.NET转换C至F C#VS 2010 ...计算误差
我使用的功能为华氏执行转换,包括这行代码:
return (celsius * (9/5)) + 32;
它不计算吧!如果我把摄氏度= 16,我得到48
我试着做同样的PHP - 我得到60,这是我假设得到的。
任何想法可能是错在这里?
我想摄氏转换在Visual Studio C#ASP.net web表单2010ASP.NET转换C至F C#VS 2010 ...计算误差
我使用的功能为华氏执行转换,包括这行代码:
return (celsius * (9/5)) + 32;
它不计算吧!如果我把摄氏度= 16,我得到48
我试着做同样的PHP - 我得到60,这是我假设得到的。
任何想法可能是错在这里?
你看到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));
注意,这将使用银行家舍(圆形连)为两个整数之间的中点。
你得到,因为整数除法这个结果。 9和5是整数 - 不是浮点数/双精度/小数或其他能够存储小数部分的类型。 9/5
结果1
与小数部分离开的 - 而这也正是你的48是来自。尝试9.0/5.0
,你应该看到不同的结果。
我猜celsius
是int
和9/5正在执行整数运算。
而是尝试:
return ((double)celsius * (9.0/5.0)) + 32.0;
检查你的数据类型 - 让9,5和32个双打;它们被C#自动假定为整数。
对于第二种解决方案,您将得到比前一个解答更接近的答案 - 但如果五倍的摄氏温度不能被九整除,它仍然会丢失任何小数分量。如果你想要一个整数返回类型,使用浮点算术后跟一个舍入操作似乎更可取,并且比简单的截断稍微精确一些。尽管我的回答比详细的+1更详细。 – acoffman 2012-02-01 20:42:12
@thecoffman:可能。取决于OP的要求,我想。将编辑添加一个笔记。 – 2012-02-01 20:43:19
Doh!超级感谢所有。 – user1121487 2012-02-01 20:53:27