【问题标题】:Memory consumption of BigDecimal (Java) [closed]BigDecimal(Java)的内存消耗[关闭]
【发布时间】:2013-10-13 13:13:41
【问题描述】:

我正在考虑编写一个小型 Java 类来处理小数。基本思想是有两个int 字段,一个用于保存小数点左侧的值,另一个用于保存小数点右侧的值。例如在以下数字中:

100.50

100 将在第一个 int 中,50 将在第二个中。

这值得做吗,或者BigDecimal 已经在其实现中做了类似的事情?

【问题讨论】:

  • 让我们把问题反过来;您有什么特别的理由不想使用 BigDecimal?
  • 我想知道,这个问题适合Stack Overflow吗?除了“视情况而定”之外似乎没有其他答案
  • @ClickUpvote 在这种情况下,第二个整数(片段的那个)的内容是什么:1.00000001?
  • 可能有避免使用 BigDecimal 的原因,但在您的问题中没有一个明显的原因。注意:在 Java 7 中,BigDecimal 尽可能使用long 作为未缩放的值,它使用与两个int 值相同的内存。如果您真的担心内存消耗,请使用double 或缩放的long,但您必须确定您需要这样做。
  • @scottb 我认为我的问题是一样的......看看 OP 以前的问题,(因为 OP 显然技术娴熟,知识渊博),这似乎是对Stack Overflow 的利用,以及获得无限代表的巧妙社会学策略的一部分:1. 发布大量问题 2. 选择一个聪明的名字,带有潜意识信息 3. 代表 4. ??? 5. 利润!

标签: java floating-point double bigdecimal


【解决方案1】:

一个好的经验法则是(转述自 J. Bloch,Effective Java,第 2 版):

“永远不要重新发明轮子。如果有一个 Java API 类可以用来做你想做的事,那么就使用它而不是尝试重写你自己的类。语言开发人员多年来一直致力于改进和优化库,通常以对独立开发人员不切实际的方式(并继续优化它们)。”

您的需求可能很简单。例如,也许您只会使用这个数字来识别一个对象(如杜威十进制系统),而您永远不会对它们进行数字运算。如果您的需求如此简单(您还没有告诉我们您将如何处理这些数字),那么编写自己的类作为优化可能是明智的。

但是,如果您要对这些数字进行任何类型的数学运算,那么使用 BigDecimal 来表示具有固定精度的数字量绝对是正确的方法。我什至不会担心内存。内存很便宜。

考虑一下 BigDecimals 已经:

  • 是不可变的
  • 是 Number 的子类
  • 实现 Comparable 接口
  • 提供算术、比例操作、舍入、比较、散列和格式转换的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多