草庐IT

BIGDECIMAL

全部标签

java - 从 java BigDecimal 转换为 double 时丢失精度

我正在使用一个完全基于double的应用程序,并且在一个将字符串解析为double的实用程序方法中遇到了问题。我找到了一个修复程序,其中使用BigDecimal进行转换解决了这个问题,但是当我将BigDecimal转换回double时又引发了另一个问题:我失去了几个精度位置。例如:importjava.math.BigDecimal;importjava.text.DecimalFormat;publicclasstest{publicstaticvoidmain(String[]args){Stringnum="299792.457999999984";BigDecimalval=n

java - 比 double 更精确的数字数据类型?

Java中是否有一种数据类型可以比double更精确地存储十进制数? 最佳答案 是的,使用java.math.BigDecimal类(class)。它可以非常精确地表示数字。如果你只需要大整数,你可以使用java.math.BigInteger相反。它们都扩展了java.math.Number.如果需要,您甚至可以使用现有的替身:doubled=67.67;BigDecimalbd=newBigDecimal(d);并且您可以使用JDBC从数据库中获取BigDecimal值:ResultSetrs=st.executeQuery()

java - 为什么 Bigdecimal(double d) 构造仍然存在?

我注意到这个构造函数存在很大的痛苦(即使在StackOverflow上也是如此)。人们使用它,即使文档明确指出:Theresultsofthisconstructorcanbesomewhatunpredictablehttp://java.sun.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal(double)我什至见过JSR-13正在APPROVED建议说明:Existingspecificationsthatmightbedeprecated:WeproposedeprecatingtheBigDecimal(d

Java BigDecimal精度问题

我知道以下行为是一个老问题,但我还是不明白。System.out.println(0.1+0.1+0.1);或者即使我使用BigDecimalSystem.out.println(newBigDecimal(0.1).doubleValue()+newBigDecimal(0.1).doubleValue()+newBigDecimal(0.1).doubleValue());为什么这个结果是:0.30000000000000004而不是:0.3?我该如何解决这个问题? 最佳答案 你真正想要的是newBigDecimal("0.1"

java - 最大精度低于无限?

我正在使用BigDecimal进行一些计算。最近我遇到了:java.lang.ArithmeticException:Non-terminatingdecimalexpansion;noexactrepresentabledecimalresult.该问题的答案发布在这里:ArithmeticException:"Non-terminatingdecimalexpansion;noexactrepresentabledecimalresult"这意味着,有一些小数位数不受限制的除法,所以BigDecimal告诉我它无法准确计算结果。为避免这种情况,我必须调用BigDecimal.set

java - 将 Java BigDecimal 舍入到最近的间隔

我有一个BigDecimal计算结果,我需要将其四舍五入到最接近的指定区间(在本例中为金融市场报价单位大小)。例如价格[TickSize]->四舍五入的价格100.1[0.25]->100100.2[0.25]->100.25100.1[0.125]->100.125100.2[0.125]->100.25谢谢。更新:schnaader的解决方案,翻译成Java/BigDecimal术语:price=price.divide(tick).setScale(0,RoundingMode.HALF_UP).multiply(tick) 最佳答案

java - 为什么 new BigDecimal ("0.015").compareTo(new BigDecimal(0.015)) 返回 -1?

这个问题在这里已经有了答案:Whyarefloatingpointnumbersinaccurate?(5个答案)BigDecimalcompareTonotworkingasexpected(1个回答)关闭7年前。为什么newBigDecimal("0.015").compareTo(newBigDecimal(0.015))返回-1?如果我希望这两者相等,是否有其他方法来比较它们?

java - 为什么 new BigDecimal ("0.0").stripTrailingZeros() 的标度为 1?

运行这个简单的程序:publicstaticvoidmain(finalString...args){System.out.println(BigDecimal.ZERO.scale());System.out.println(newBigDecimal("0").scale());System.out.println(newBigDecimal("0.0").stripTrailingZeros().scale());System.out.println(newBigDecimal("1.0").stripTrailingZeros().scale());}输出:0010我的问题很简

java - Java 中有 long double 的替代品吗?

我在阅读C中的数据类型。我发现longdouble的范围比java中的double大。对于非常大的数字,我们可以在C中使用longdouble。如果我想在java中存储相同的数字,我们必须做什么?我们可以使用哪种数据类型?doubleinjavatakes8bytes(64bits)IEEE754.itCoversarangefrom4.94065645841246544e-324dto1.79769313486231570e+308d(positiveornegative).longdoubleinctakes10bytes(80bits)谁能告诉我java中有没有longdoubl

java - double 或 BigDecimal 会溢出吗?

Java8给了我们Math.addExact()对于整数而不是小数。double和BigDecimal是否可能溢出?根据Double.MAX_VALUE判断和HowtogetbiggestBigDecimalvalue我会说答案是肯定的。因此,为什么我们不为这些类型也提供Math.addExact()呢?自己检查这个最可维护的方法是什么? 最佳答案 double溢出到Infinity和-Infinity,它不会环绕。BigDecimal不会溢出,期间,它仅受计算机内存量的限制。请参阅:HowtogetbiggestBigDecima