Tag: bigdecimal

Java BigDecimal使用String构造函数进行错误,以使用ROUND_HALF_UP进行舍入

我正在尝试实现一个新的等级舍入到BigDecimal类,我得到一个可能的错误,我可能做错了。 下面的代码暴露了我的问题: public static void main(String[] args) throws IOException { BigDecimal valDouble = new BigDecimal(0.35); valDouble = valDouble.setScale(1, BigDecimal.ROUND_HALF_UP); System.out.println(valDouble.doubleValue()); // prints 0.3 BigDecimal valString = new BigDecimal(new String(“0.35”)); valString = valString.setScale(1, BigDecimal.ROUND_HALF_UP); System.out.println(valString.doubleValue()); // prints 0.4 } 我的疑问是,对于double和String构造函数,BigDecimal是不同的? 我无法理解这个’bug’,至少,我只是用一个简单的字符串concat来“解决”它,如下所示: BigDecimal valDouble = new BigDecimal(“” + 0.35); 什么可能导致这种奇怪的行为?

欢迎创建我自己的Swing组件的建议

最近我问到哪个是最好的Swing组件绑定到BigDecimal变量(具有一些特定的编辑属性)。 事实certificate,没有一个标准的Swing组件完全适合我,也没有找到我发现的第三方Swing组件库。 所以我决定创建自己的Swing组件。 组件说明: 我想扩展JTextField或JFormattedTextField ,因此我的新组件可以很容易地绑定到BigDecimal变量。 该组件将具有可自定义的缩放和长度属性。 行为: 绘制组件时,它仅显示右侧刻度数字的小数点和空格。 当组件获得焦点时,插入符号应位于小数点左侧。 当用户键入数字(忽略任何其他字符)时,它们出现在插入符的左侧,只接受长度 – 数字的数字,当整数部分已满时,忽略任何其他数字类型。 每当用户键入小数点时,插入符号移动到小数点的右侧。 键入的以下数字显示在小数部分,只有小数位数被认为是小数部分已满的任何其他数字被忽略。 此外,当用户键入小数点左侧的数字时,应显示千位分隔符。 我还希望能够将该组件用作JTable中的单元编辑器 (无需对其进行两次编码)。 在组件上调用getValue()方法应该生成表示刚刚输入的数字的BigDecimal。 我从来没有创建过自己的Swing组件; 我几乎没有使用标准的。 所以我很感激有关创建所描述组件的任何好的教程/信息/提示。 到目前为止, 这是我唯一得到的东西。 提前致谢。

Java BigDecimal内存使用情况?

是否有估计BigDecimal消耗的内存量的准则? 寻找类似于这些指南的内容来估算String内存使用情况。

“新BigDecimal(13.3D)”导致不精确的“13.3000000000000007105 ..”?

Java的BigDecimal怎么会这么痛苦呢? Double d = 13.3D; BigDecimal bd1 = new BigDecimal(d); BigDecimal bd2 = new BigDecimal(String.valueOf(d)); System.out.println(“RESULT 1: “+bd1.toString()); System.out.println(“RESULT 2: “+bd2.toString()); RESULT 1: 13.300000000000000710542735760100185871124267578125 RESULT 2: 13.3 是否存在需要结果1的情况? 我知道Java 1.5改变了toString()方法,但这是预期的后果吗? 另外我意识到BigDecimal有doubleValue()等,但我正在使用的库有助于使用toString()而我无法改变:-( 干杯。

BigDecimal来自Double不正确的值?

我试图从字符串中创建一个BigDecimal。 不要问我为什么,我只是需要它! 这是我的代码: Double theDouble = new Double(“.3”); System.out.println(“The Double: ” + theDouble.toString()); BigDecimal theBigDecimal = new BigDecimal(theDouble); System.out.println(“The Big: ” + theBigDecimal.toString()); 这是我得到的输出? The Double: 0.3 The Big: 0.299999999999999988897769753748434595763683319091796875 有任何想法吗?

为什么新的BigDecimal(“0.0”)。stripTrailingZeros()的比例为1?

运行这个简单的程序: public static void main(final String… args) { System.out.println(BigDecimal.ZERO.scale()); System.out.println(new BigDecimal(“0”).scale()); System.out.println(new BigDecimal(“0.0”).stripTrailingZeros().scale()); System.out.println(new BigDecimal(“1.0”).stripTrailingZeros().scale()); } 输出: 0 0 1 0 我的问题很简单:为什么第三个println没有输出0 ? 那似乎合乎逻辑…… 编辑 :好的,所以,这是一个非常古老的错误: 错误链接 事实上,它“适用于”任意数量的零: new BigDecimal(“0.0000”).stripTrailingZeroes().scale()是4!

使用Struts2标签格式化数字

我想在jsp页面中格式化一些数字。 首先,我在我的porperties中定义了一些资源 format.number.with2Decimal={0,number,#0.00} …… 问题1: 我想知道’#’和’0’是什么意思? 0.00,#0.00,##。00,### 0.00 谁能告诉我他们之间的区别? 谢谢! 问题2: 如果我在我的动作BigDecimal number1中定义一个BigDecimal类型; 然后我的页面应该使用一种格式来显示这个值, 1.if number1=null then show -NIL- 2.if number1=0 then show -NIL- 3.if number1>0 then show 1.00,3434.98 ….. 请忽略数字<0 问题3: 将number1更改为String, 1.if number1=null or empty or blank then show -NIL- 2.if number1=Hello then show Hello …. 你能帮我个忙吗?

Java BigDecimal精度问题

我知道以下行为是一个老问题,但我仍然不明白。 System.out.println(0.1 + 0.1 + 0.1); 或者即使我使用BigDecimal System.out.println(new BigDecimal(0.1).doubleValue() + new BigDecimal(0.1).doubleValue() + new BigDecimal(0.1).doubleValue()); 为什么这个结果是: 0.30000000000000004而不是: 0.3 ? 我怎么解决这个问题?

将BigDecimal舍入到最接近的5美分

我想弄清楚如何将货币金额向上舍入到最接近的5美分。 以下显示了我的预期结果 1.03 => 1.05 1.051 => 1.10 1.05 => 1.05 1.900001 => 1.10 我需要结果的精度为2(如上所示)。 更新 按照下面的建议,我能做的最好的就是这个 BigDecimal amount = new BigDecimal(990.49) // To round to the nearest .05, multiply by 20, round to the nearest integer, then divide by 20 def result = new BigDecimal(Math.ceil(amount.doubleValue() * 20) / 20) result.setScale(2, RoundingMode.HALF_UP) 我不相信这是100%犹太人 – 我担心转换到双打时精度可能会丢失。 […]

Java BigDecimal三角法

我正在开发一个数学解析器,它能够像’5+b*sqrt(c^2)’一样评估字符串。 我正在使用ANTLR进行解析并取得良好进展。 现在我摔倒了Java类BigDecimal并且想:嘿,为什么不在这里考虑精度。 我的问题是Java API没有为java.lang.Math等BigDecimal提供三角函数方法。 你知道是否有像Apache Commons这样的好的数学库可以解决这个问题吗? 其他问题是如何实现幂方法,以便我可以用BigDecimal s计算4.9 ^ 1.4。 这可能吗? 关于数值计算的书籍请求也受到赞赏。