gpt4 book ai didi

java - 在java中表示大十进制的数据类型

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:10 24 4
gpt4 key购买 nike

“10364055.81”这样的十进制数适合用哪种数据类型表示。

如果尝试使用 double:

double d = 10364055.81;

但是当我尝试打印数字时,它显示为“1.036405581E7”,这是我不想要的。

我应该使用 BigDecimal 吗?但它显示为 10364055.81000000052154064178466796875。是否有任何数据类型可以按原样显示值?而且这个数字可能比举个例子的要大。

顺便说一句,使用 BigDecimal 会影响应用程序的性能吗??我可能会在我几乎所有的 DTO 中使用它。

最佳答案

您应该使用 BigDecimal - 但使用 String 构造函数,例如:

new BigDecimal("10364055.81");

如果您将 double 传递给 BigDecimal,Java 必须首先创建该 double - 由于 double 不能准确表示大多数小数,因此它确实将值创建为 10364055.81000000052154064178466796875然后将其传递给 BigDecimal 构造函数。在这种情况下,BigDecimal 无法知道您实际上指的是舍入版本。

一般来说,使用 BigDecimal 的非字符串构造函数应该被视为警告,表明您没有获得该类的全部好处。

编辑 - 基于重新阅读您想要做的事情,我最初的主张可能过于强烈。当您需要精确表示小数值时,BigDecimal 是一个不错的选择(货币处理是显而易见的选择,例如,您不希望 5.99 * 一百万是 5990016.45

但是,如果您不担心该数字被内部存储为与您输入的十进制字面量非常不同的值,并且只想以相同的格式再次打印出来,那么正如其他人所说,NumberFormat 的一个实例(在本例中,new DecimalFormat("########.##"))将起到作用很好地输出 double ,或者 String.format可以做很多相同的事情。

至于性能——BigDecimals 自然会比使用原语慢。但是,通常情况下,除非您的程序的绝大部分涉及数学运算,否则您不太可能真正注意到任何速度差异。这并不是说您应该全面使用 BigDecimals;而是,如果您可以从它们的功能中获得真正的好处,而这些功能使用普通 doubles 很难或不可能实现,那么不要担心它们理论上引入的微小性能差异。

关于java - 在java中表示大十进制的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1605910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com