用于检索double的整数部分的Java类型转换为double

时间:2011-12-01 13:59:40

标签: java casting

我有时倾向于使用(double)(long)(a * b / c)将结果的整数部分存储为double。这也适用于负数。

有没有更好的方法来实现同样的事情,因为我认为类型转换是一项代价高昂的操作。

请注意我正在寻找数字的整数部分,而不是舍入值。 例如:

MyObj.setDouble((double)(long)(522.99))
MyObj.getDouble() returns 522.0 and not 523.0

感谢。

3 个答案:

答案 0 :(得分:4)

尝试Math.rint(double)Math.round(double)。无论性能差异如何,它至少都更加清晰简洁。

<强> [编辑]

回答您澄清的问题 - “如何在不进行投射的情况下获取双精度的整数部分”(尽管您的标题询问舍入),请尝试以下操作:

public static double integerPart(double d) {
  return (d <= 0) ? Math.ceil(d) : Math.floor(d);
}
integerPart(522.99); // => 522d
integerPart(-3.19); // => -3d

当然,这种形式可能不比铸造快,因为它使用了比较和方法调用。

答案 1 :(得分:0)

此处的性能不是问题。但是代码(double)(long)(a*b/c)很难看。如果将结果分配给`double variable:

,实际上根本不需要转换

double d = a*b/c;double d = (double)(long)a*b/c;

完全相同

从低级到高级类型移动时,您实际上从不需要执行转换。原语(例如int - &gt; double)和类(例如ArrayList - &gt; List)是正确的。

答案 2 :(得分:0)

Math.floor(double)怎么样我看不出整数部分和粗化部分之间的区别。