我有一个非常小的问题,你们中的一些人甚至可能认为这个问题不值得浪费stackoverflow服务器资源。我有一个公式来计算给定santigrant的华氏度。 C是从keyboad读取的值。对于C = 1,num必须是33.8但它输出为33.0因为java认为9/8为1.0而不是1.8。我真的坚持这一点。我可以使用1.8 * C + 32,但我只想知道是否有其他解决方案。
double num = (9 / 5) * C + 32; // Calculates as 1 * C + 32 which is wrong;
double num = (9.0 / 5.0) * C + 32; // Calculates as 1.8 * C + 32 which is true;
答案 0 :(得分:4)
在java中表达文字双精度的方法是以d
为后缀。像这样:
double num = (9d / 5d) * C + 32d;
文字花车类似。只需使用f
后缀即可。像这样:
float num = (9f / 5f) * C + 32f;
答案 1 :(得分:1)
这是因为它将9和5都视为整数。您已通过以下行回答了自己的问题。这是做你想做的最短最好的方式。
答案 2 :(得分:1)
取决于C是整数还是浮点。
如果C是浮点数,那么找到的解决方案没有明显不同。 (显然,语法和类似的东西存在细微差别。但它们只是对正确解决方案的外观变化。)
如果C是整数,那么替代方法是使用查找表。 (但这不是一个好的选择,除非你在没有原生浮点运算指令的残缺硬件上运行。)
这里真正的问题是你已经告诉 Java使用整数除法进行部分计算...在表达式的关键点使用整数文字。 Java中的整数除法产生整数结果,但在这一点上你真的需要一个(数学)实数值。 Java正在做你告诉它要做的事情。
简而言之,Java并没有弄错。你是......告诉Java以错误的方式进行计算。
答案 3 :(得分:0)
您需要了解整数和浮点数之间的区别。
double
和float
声明了浮点数,而long
和int
(以及char
和byte
以及{{1} })声明整数。当你只用整数算术时,你会得到一个整数结果。
“{1}}和short
之类的”文字“被视为整数 ,除非 包含小数点(例如7
或589
或7.0
)。如果它们包含该小数点,则它们被视为浮点数。
因此,如果你有一个表达式(如0.589
),它都是文字,并且你想要浮点结果,那么至少有一个文字包含一个小数点(例如123.456
})。在浮点表达式中编码文字时,始终使用9 / 5
是很好的做法。