将double(primitive)转换为Long(Wrapper)

时间:2014-01-14 02:40:40

标签: java casting

我必须在我的代码中的多个位置将原始double转换为Long(Wrapper)。这是我可以使用的两种方式 -

linkcatch.setCode(Long.valueOf((long) relatedCd.getDouble(value)));

(将原始double转换为原始long,然后将Wrapper Long转换为

linkcatch.setCode(Long.valueOf(String.valueOf(relatedCd.getDouble(value))));

(将double转换为String to Wrapper Long)

有没有办法从原生双精度转换为Wrapper而不进行中间强制转换。

我很担心,因为我需要做很多地方。感谢。

4 个答案:

答案 0 :(得分:1)

不是在每个java语句中进行转换,而是可以创建静态方法,该方法将double值作为参数,执行转换并返回Long对象。通过这种方式,它易于维护并且代码的可重用性没有冗余

答案 1 :(得分:1)

Just cast和java autoboxing将为您转换为Long对象类型。无需制作特殊的库或额外的方法(保持精益!)

linkcatch.setCode((long)relatedCd.getDouble(value));

注意:

  • 您可能想要进行舍入而不是仅仅进行转换。 (double to long conversion
  • 我看到你有一个'realtedCd'对象,这意味着你可能正在处理金钱或算术运算。如果是这样,我建议使用BigDecimal而不是双精度来实现精度Double vs. BigDecimal?

答案 2 :(得分:1)

找到一种更短的方法来制作它。您可以使用Math.Round获取较长的原生值。之后,您可以简单地将其投射到长

double a = -5.42
Long = (Long)Math.round(a);

然而,另一种做法就是让另一个班级为你做这项工作。

public class Util{

    public static Long getLong(double a){
         return (Long)Math.round(a);
    }
}

这样你的代码看起来就像这样

linkcatch.setCode(Util.getLong(value));

而不是

linkcatch.setCode(Long.valueOf((long) relatedCd.getDouble(value)));

linkcatch.setCode(Long.valueOf(String.valueOf(relatedCd.getDouble(value))));

希望它可以帮助您使代码更清晰,更易于管理。此外,如果您希望所有Long值都向上或向下舍入,您只需编辑一个位置(The Util类),而不是100个不同。

答案 3 :(得分:0)

你可以这样做:

Long l = new Double(relatedCd.getDouble(value)).longValue();

Java autoboxing将帮助您做其他事情。

相关问题