将Long转换为BigDecimal

41

我该如何将Long类型转换为BigDecimal类型?


7
你不能将一个转换为另一个。它们不是共同超类的子类。 - S.Lott
6个回答

68

你必须创建一个新的 BigDecimal

BigDecimal d = new BigDecimal(long);

24

为了完整性,您可以使用:

// valueOf will return cached instances for values zero through to ten
BigDecimal d = BigDecimal.valueOf(yourLong);

0-10指的是Java 6实现的版本,之前的JDK版本不确定是否包含此功能。


2
根据JavaDocs的建议,推荐使用valueOf方法:'这个"静态工厂方法"比(long)构造器更好,因为它允许重复使用BigDecimal常用值。' - Steve Kuo

17

不应该使用BigDecimal d = new BigDecimal(long); !!

对于长整型,BigDecimal的实现不够精确。 在金融应用中,这一点非常重要!

但是,对于字符串参数,BigDecimal的实现更好!因此,请使用类似以下方式:

new BigDecimal(yourLong.toString());

有一次关于这个问题的讨论在http://www.parleys.com/上进行了。


1
我知道现在有点晚了,但你是否有更直接的链接来证实这个说法?因为查看JDK7中BigDecimal源代码,它似乎已经过时了。 - Gareth Davis
已经有一段时间了,我记得在 Parley 上他们提出了这个说法,但我现在找不到链接了。也许在 JDK7 中已经进行了优化。 - Fico

4

您不能将其转换。但是,您可以创建一个新的BigDecimal。如果您拥有非原始类型的Long,则可以使用Long.getLongValue()Long中获取long

BigDecimal bigD = new BigDecimal(longVal);

2

您需要创建一个新的BigDecimal对象

  Long test = new Long (10);
  BigDecimal bigD = new BigDecimal(test.longValue());

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接