Tag: bigdecimal

JTextField特定格式检查

我想检查输入到我的JTextField1的输入是否等于下面显示的示例图片,该怎么做? 我只能通过下面的代码来检查是否输入了数字来尝试阻止并捕获NumberFormatException try { taxratio = new BigDecimal(jTextField1.getText()); } } catch (NumberFormatException nfe) { System.out.println(“Error” + nfe.getMessage()); }

Java BigDecimal与The Financial Mans – “1美分问题”

我有这个问题: 财务人员说:“你的程序错误” 。 财务的官方价值表和最终计算表是 基数%总值667.63 – 1.5(0.015)= 657.62 705.98 – 1.5(0.015)= 695.39 687.77 – 1.5(0.015)= 677.45 844.62 – 1.5(0.015)= 831.95 743.23 – 1.5(0.015)= 732.08 775.15 – 1.5(0.015) = 763.52 874.82 – 1.5(0.015)= 861.70 949.63 – 1.5(0.015)= 935.39 987.18 – 1.5(0.015)= 972.37 1040.28 – 1.5(0.015)= 1024.68 1077.70 – 1.5(0.015)= 1061.54 995.68 – 1.5(0.015)= 980.74 1280.55 – […]

我们可以使用double来存储货币字段并使用BigDecimal进行算术运算

我知道double / float的问题,建议使用BigDecimal而不是double / float来表示货币字段。 但是双/浮动更有效且节省空间。 然后我的问题是:使用double / float来表示Java类中的货币字段是可以接受的,但是使用BigDecimal来处理算术(即在任何算术运算之前将double / float转换为BigDecimal)和等同检查? 原因是节省了一些空间。 我真的看到很多项目都使用double / float来表示货币领域。 这有什么陷阱吗? 提前致谢。

如何处理Java的BigDecimal中的舍入错误

我正在使用在java应用程序中实现脚本引擎的开源项目(axil),并且在尝试利用BigDecimal的舍入时遇到了一个主要障碍。 似乎BigDecimal正在将我的输入转换为科学记数法,然后将我传入的精度应用于数字的SN表示系数,而不是其非SN表示。 例如: new BigDecimal(“-232454.5324”).round(new MathContext(2, RoundingMode.HALF_UP)).toString() 产生-2.3E+5的结果。 这给我带来了两个问题。 首先,我期待-232454.5 ( -2.324545E+5 )的结果,所以得到-230000会抛出任何涉及结果的数学运算。 第二,我没有想到,也无法找到解决办法,在SN中得到结果(虽然我希望有一种格式化方法,我还没有偶然发现)。 现在由于项目的性质,我们很少期望将数量的大小/类型传递给round()方法,因此任何解决方案都需要高度模块化。 有没有人有什么建议? 如果它有用,这里是项目中此错误的谷歌代码问题报告的链接。 这是项目主页的链接。 很感谢任何forms的帮助。

BigDecimal中Divide方法的Scale()

new BigDecimal(“37146555.53880000”).divide(new BigDecimal(“1000000”)).scale() 这返回10 。 但根据API, divide方法: 返回一个BigDecimal,其值为(this / divisor),其首选标度为(this.scale() – divisor.scale()); 所以在这种情况下, 37146555.53880000’s比例是8 ,而1000000的比例是0 。 所以结果应该是8 ,而不是10 。 我在这里想念的是什么? 谢谢

Java大十进制数格式exception

为什么下面的代码抛出了java数字格式exception? BigDecimal d = new BigDecimal(“10934,375”);

BigDecimal表示法eclipse插件或漂亮的外部工具

我需要使用BigDecimal进行大量操作,我发现必须表达 Double a = b – c * d; //natural way 如 BigDecimal a = b.subtract(c.multiply(d))//BigDecimal way 不仅丑陋,而且是我与业务分析师之间的错误和沟通问题的根源。 他们完全能够用双打读取代码,但现在他们不能。 当然一个完美的解决方案是java支持运算符重载,但由于这不会发生,我正在寻找一个eclipse插件甚至是一个外部工具,可以自然地从“自然方式”转换为“bigdecimal方式”。 我不是要尝试预处理源代码或动态翻译或任何复杂的事情,我只想要一些我可以输入文本和获取文本的东西,并将“自然方式”保留为源代码中的注释。 PS:我发现这个令人难以置信的智能黑客,但我不想开始进行字节码操作。 也许我可以使用它来创建一个Natural2BigDecimal翻译器,但如果有人已经完成了这样的工具,我不想重新发明轮子。 我不想切换到Scala / Groovy / JavaScript,我也不能,公司规则禁止在服务器端代码中使用java。

BigDecimal下溢

我试图用Java渲染一个名为“Lorenz Attractor”的分形图。 因为double不起作用(值超出范围),所以我决定选择BigDecimals。 经过38次迭代后,我的代码崩溃,它让我得到一个ArithmeticException(Underflow)。 下面是一些代码: BigDecimal xnew = this.x.add(this.hBig.multiply(BigDecimal.TEN).multiply(this.x.add(this.y.negate()))); //This is the line that crashes BigDecimal ynew = this.y.add(this.hBig.multiply(this.x.negate().multiply(this.z)).add(ZWENTYEIGHT.multiply(this.x.add(this.y.negate())))); BigDecimal znew = this.z.add(this.hBig.multiply(this.x.multiply(this.y).add(FRAC.multiply(this.z).negate()))); this.x = xnew; this.y = ynew; this.z = znew; System.out.println(“X=”+this.x); System.out.println(“Y=”+this.y); System.out.println(“Z=”+this.z); System.out.println(“———-“); 这是我得到的输出 。 我可以做任何反对吗? 对不起,如果代码不是很好。 我也可以提供一些关于应该怎么做的伪代码,告诉我你是否需要它。 编辑:这是分裂的第二行: BigDecimal temp = ZWENTYEIGHT.multiply(this.x.add(this.y.negate())); BigDecimal temp2 = this.x.negate().multiply(this.z); BigDecimal temp3 = this.hBig.multiply(temp2); //This […]

在Java中转换美元(整数)的美元(大十进制)的最佳方法是什么?

我必须将我的Web应用程序与支付网关集成。 我想以美元输入总金额,然后将其转换为美分,因为我的支付网关库接受的数量为Cents( Integer类型)。 我发现java中的Big Decimal是操纵货币的最佳方式。 目前我输入50美元的输入并将其转换为Integer如下所示: BigDecimal rounded = amount.setScale(2, BigDecimal.ROUND_CEILING); BigDecimal bigDecimalInCents = rounded.multiply(new BigDecimal(“100.00”)); Integer amountInCents = bigDecimalInCents.intValue(); 这是将美元转换为美分的正确方法还是应该以其他方式实现?

在除法后得到一个数字中的所有小数位

我目前正在使用BigDecimal,它给了我更多的小数,但还不足以满足我的目的。 我需要能够一直到10 ^ 6数字。 这是我目前的代码 BigDecimal num = new BigDecimal(103993/33102.0); pw.println(num.toString()); 它输出3.14159265301190249175533608649857342243194580078125 其中数字实际上有更多的小数: http ://www.wolframalpha.com/input/?i = 103993%2F33102