如何正确划分Java中的不可分数?

时间:2014-11-15 00:45:53

标签: java

我有一个非常小的问题,你们中的一些人甚至可能认为这个问题不值得浪费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;

4 个答案:

答案 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)

您需要了解整数和浮点数之间的区别。

doublefloat声明了浮点数,而longint(以及charbyte以及{{1} })声明整数。当你只用整数算术时,你会得到一个整数结果。

“{1}}和short之类的”文字“被视为整数 ,除非 包含小数点(例如75897.0)。如果它们包含该小数点,则它们被视为浮点数。

因此,如果你有一个表达式(如0.589),它都是文字,并且你想要浮点结果,那么至少有一个文字包含一个小数点(例如123.456 })。在浮点表达式中编码文字时,始终使用9 / 5是很好的做法。