Tag: bigdecimal

数据类型表示java中的大小数

哪种数据类型易于表示十进制数,如“10364055.81”。 如果尝试使用double: double d = 10364055.81; 但是当我尝试打印数字时,它显示为“ 1.036405581E7 ”,这是我不想要的。 我应该使用BigDecimal吗? 但其显示为10364055.81000000052154064178466796875 。 是否有任何数据类型显示值? 此数字也可能大于作为示例的数字。 BTW,会使用BigDecimal效果应用程序的性能吗? 我几乎可以在所有的DTO中使用它。

BigDecimal(“0”)和BigDecimal.ZERO之间有区别吗?

无论是对于新变量的比较还是初始化,它会对您使用哪一个产生影响? 我知道BigDecimal.ZERO是一个1.5特性,所以这是一个问题,但假设我使用1.5是否重要? 谢谢。

如何使用BigDecimal会影响应用程序性能?

我想使用BigDecimal来表示低延迟交易应用程序中的任意精度数字,如价格和金额,每秒有数千个订单和执行报告。 我不会对它们进行很多数学运算,所以问题不在于BigDecimal本身的性能,而在于大量BigDecimal对象会如何影响应用程序的性能。 我担心的是,大量短命的BigDecimal对象会给GC带来压力并导致CMS收集器中更大的Stop-The-World暂停 – 这绝对是我想要避免的。 您能否确认我的疑虑并建议使用BigD的替代方案? 此外,如果您认为我的担忧是错误的 – 请解释原因。 更新 : 感谢所有回答的人。 我现在确信使用BigDecimal会损害我的应用程序的延迟(即使我仍然计划测量它)。 目前我们决定坚持使用“非常非OOP”解决方案(但没有精确命中) – 使用两个int ,一个用于尾数,另一个用于指数。 这背后的基本原理是基元放在堆栈上,而不是堆,因此不受垃圾收集的影响。

从给定范围生成随机BigDecimal值

我需要从给定范围生成随机BigDecimal值。 怎么用Java做?

new BigDecimal(double)vs new BigDecimal(String)

当BigDecimal与double和BigDecimal的输入一起使用时,输入为String似乎会出现不同的结果。 BigDecimal a = new BigDecimal(0.333333333); BigDecimal b = new BigDecimal(0.666666666); BigDecimal c = new BigDecimal(“0.333333333”); BigDecimal d = new BigDecimal(“0.666666666”); BigDecimal x = a.multiply(b); BigDecimal y = c.multiply(d); System.out.println(x); System.out.println(y); x输出为 0.222222221777777790569747304508155316795087227497352441864147715340493949298661391367204487323760986328125 而y是 0.222222221777777778 我错误地说这是因为双重不精确? 但由于这是一个BigDecimal ,不应该是一样的吗?

Hibernate – Custom Dialect的BigDecimal列映射

我正在使用Hibernate作为我们的对象关系映射,使用一个用于模糊数据库的自定义方言。 我从这个数据库中检索的实体有一列,因此: @Column(name = “GROSS_WEIGHT”, precision = 9, scale = 3) private BigDecimal grossWeight; 数据库将此列定义为数字,精度为9,比例为3。 我可以看到Hibernate生成的SQL来检索数据,当我使用数据库查询工具执行相同的Query时,它返回GROSS_WEIGHT列的“9.68”。 但是,在由Hibernate检索的实体中,’grossWeight’字段包含值’10’, scale为0, precision为2! 在我正在使用的自定义方言类中,我尝试重写以下列类型: registerColumnType( Types.DECIMAL, “numeric($p,$s)” ); registerColumnType( Types.DOUBLE, “numeric($p,$s)” ); registerColumnType( Types.NUMERIC, “numeric($p,$s)” ); 但它仍然只返回(舍入的)整数。 这在我们使用Postgres方言从Postgres检索对象的应用程序的其他地方工作。 知道我应该在方言中做什么,所以我可以让Hibernate正确设置检索到的BigDecimal的精度/比例?

如何在Real(SQlite)列中存储BigDecimal(Java)值?

我仍然遇到BigDecimal的大问题(泪水的痕迹从这里开始,到目前为止一直持续到这里 。 现在我遇到了相反的问题 – 从POJO中的BigDecimal到SQLite表中的REAL。 POJO定义为: public class DeliveryItem { private int _id; private String _invoiceNumber; private String _UPC_PLU; private String _vendorItemId; private int _packSize; private String _description; private BigDecimal _cost; private BigDecimal _margin; private BigDecimal _listPrice; private int _departmentNumber; private String _subdepartment; private String _quantity; public void setID(int id) { this._id = id; } […]

生成pi到第n位java

我想知道如何生成pi到第n位。 我有几个基本想法。 使用Math.PI并提高精度(如果可能的话) 使用欧拉的公式来生成pi,但即使在这里,我也需要提高精度(我认为) 还有Srinivasa Ramanujan用于生成PI的公式,该公式因其快速收敛而闻名。 这个公式似乎很难实现。 我相信,我还必须提高这里的精确度。 所以简而言之,无论哪种方式,我都需要根据第n位数增加BigDecimal的精度。 我如何将BigDecimal的精度提高到第n位? 另外,如果有更好更快的做法,请指点我正确的方向。 编辑:我只是想生成PI。 我不想用于计算。 这是一个关于如何使用BigDecimal来实现我生成PI的想法的问题。

格式化BigDecimal,无需科学记数法,具有完全精确度

我想将BigDecimal转换为String以进行打印,但打印出所有数字而没有科学记数法。 例如: BigDecimal d = BigDecimal.valueOf(12334535345456700.12345634534534578901); String out = d.toString(); // Or perform any formatting that needs to be done System.out.println(out); 我想打印12334535345456700.12345634534534578901 。 现在我得到: 1.23345353454567E+16 。

为什么Java BigDecimal会返回1E + 1?

为什么此代码有时会返回1E + 1,而对于其他输入(例如17),输出不会以科学计数法打印? BigDecimal bigDecimal = BigDecimal.valueOf(doubleValue).multiply(BigDecimal.valueOf(100d)).stripTrailingZeros(); System.out.println(“value: ” + bigDecimal);