Tag: bigdecimal

BigDecimal减法

我想减去2个double值,我尝试了以下代码。 double val1 = 2.0; double val2 = 1.10; System.out.println(val1 – val2); 我得到了输出, 0.8999999999999999 为了获得输出为0.9我尝试使用BigDecimal如下, BigDecimal val1BD = new BigDecimal(val1); BigDecimal val2BD = new BigDecimal(val2); System.out.println(val1BD.subtract(val2BD)); 我得到了输出, 0.899999999999999911182158029987476766109466552734375 然后我尝试使用BigDecimal.valueOf() val1BD = BigDecimal.valueOf(val1); val2BD = BigDecimal.valueOf(val2); System.out.println(val1BD.subtract(val2BD)); 最后我得到了0.9的输出。 我的问题是案例2和案例3有什么区别? 在案例2中为什么我得到这样的输出?

BigDecimal movePointRight和scaleByPowerOfTen有什么区别?

使用以下代码: BigDecimal x = new BigDecimal(“34.5678”); BigDecimal a = x.movePointRight(3); BigDecimal b = x.scaleByPowerOfTen(3); BigDecimal c = x.movePointRight(-3); BigDecimal d = x.scaleByPowerOfTen(-3); a和b均为34567.8,c和d均为0.0345678。 a.scale()和b.scale都是1, c.scale()和d.scale()都是7。 这两种方法在什么情况下产生不同的结果?

Scala和Java BigDecimal

我想在我的应用程序中从Java切换到基于Math的模块的脚本语言。 这是由于Java的可读性和function限制。 例如,在Java中我有这个: BigDecimal x = new BigDecimal(“1.1”); BigDecimal y = new BigDecimal(“1.1”); BigDecimal z = x.multiply(y.exp(new BigDecimal(“2”)); 如您所见,如果没有BigDecimal运算符重载,简单的公式会很快变得复杂。 有了双打,看起来很好,但我需要精确度。 我希望Scala能做到这一点: var x = 1.1; var y = 0.1; print(x + y); 默认情况下,我会得到类似十进制的行为,唉,Scala默认情况下不使用十进制计算。 然后我在Scala中这样做: var x = BigDecimal(1.1); var y = BigDecimal(0.1); println(x + y); 我仍然得到一个不精确的结果。 在Scala中有什么我没做的吗? 也许我应该使用Groovy来最大化可读性(它默认使用小数)?

BigDecimal和Money

我研究过并发现,在处理货币时,最好的计算方法是使用BigDecimal类。 考虑到这一点,我正在制定一个代码,将各种类型的外币兑换成美元货币,反之亦然(具体而言,是一种取货币并将其兑换成美元货币的现金寄存器,计算变化并将此金额返还给外币客户)。 截至目前,许多方法使用double ,其中两个使用int作为用于计算美国货币的参数。 题: 由于我想在计算中使用BigDecimal类,我是否应该将所有涉及双精度计算的方法更改为BigDecimal?

我可以用什么变量类型来保存java中的大数(30+位)?

是否有一个非常大的变量类型我可以在Java中使用来存储大量数字(最多四十位数)? long的最大值是9223372036854775807,这是19位数 – 不够大。 我正在尝试创建一个可以处理大数字的计算器,因为现在大多数只能保持不足10位左右的数字,而且我希望得到数字更大幅度的精确计算 编辑 谢谢你的回答。 我可以将BigInteger用于大整数,唯一的限制是计算机的内存(应该足够)。 对于小数,我将使用float ^ e,如@WebDaldo建议,或BigDecimal (类似于BigInteger),如@kocko建议的那样。

添加2个BigDecimal值

class Point { BigDecimal x; BigDecimal y; Point(double px, double py) { x = new BigDecimal(px); y = new BigDecimal(py); } void addFiveToCoordinate(String what) { if (what.equals(“x”)) { BigDecimal z = new BigDecimal(5); x.add(z); } } void show() { System.out.print(“\nx: ” + getX() + “\ny: ” + getY()); } public BigDecimal getX() { return x; […]

确定String是否为数字并使用Java进行转换?

我知道这个问题的变体之前经常被问到(例如这里和这里 ),但这并不是那些完全重复的。 我想检查String是否是一个数字,如果是,我想将它存储为double 。 有几种方法可以做到这一点,但所有这些方法似乎都不适合我的目的。 一种解决方案是使用Double.parseDouble(s)或类似的new BigDecimal(s) 。 但是,如果存在逗号,则这些解决方案不起作用(因此“1,234”会导致exception)。 在使用这些技术之前,我当然可以删除所有逗号,但这似乎会在其他语言环境中造成大量问题。 我查看了Apache Commons NumberUtils.isNumber(s) ,但是它遇到了相同的逗号问题。 我考虑过NumberFormat或DecimalFormat ,但那些看起来太宽松了。 例如,“1A”被格式化为“1”而不是表示它不是数字。 此外,像“127.0.0.1”这样的东西将被计为数字127而不是表示它不是数字。 我觉得我的要求不是那么奇特,我是第一个做到这一点,但没有一个解决方案完全符合我的要求。 我想即使我不确切知道我需要什么(否则我可以编写自己的解析器),但我知道上述解决方案因指示的原因不起作用。 是否存在任何解决方案,或者我是否需要准确弄清楚我需要什么并为其编写自己的代码?

BigDecimal和BigInteger的限制是什么?

我在一个程序中将两个巨大的BigInteger值相乘。 它失败了。 BigInteger和BigDecimal的限制是什么?

在java中向上舍入到最接近的0.05的最佳方法

考虑到除食品外的所有商品均适用10%的税。 此外,import商品还需缴纳5%的附加税。 如果音乐CD的费用是12.49。 该项目的税金为1.499。 如果import香水瓶的成本为47.50,则该项目的税率为7.125 有一项政策规定,项目的税收应四舍五入至最接近的0.05。 因此,1.499应四舍五入为1.5,7.125应四舍五入为7.25。 使用逻辑可以实现上述舍入要求: (float) Math.ceil(taxAmount / 0.05f) * 0.05f; 将税收添加到项目的成本中会给出: 音乐CD:12.49 + 1.5 = 13.99import巧克力盒:47.50 + 7.25 = 54.65。 我面临以下输入的问题: 如果import巧克力盒的成本是11.85,则税率为0.5925 使用舍入政策,四舍五入后的税率为0.6。 当我们添加11.85 + 0.6这两个都是浮点数时,我们得到结果为12.450001。 与其他输入不同,此特定输入提供了大量小数位,而不是其他输出中的2位小数。 我尝试使用BigDecimal而不是float来存储所有值,并将比例设置为2位小数。 这种方法的问题是如果没有指定舍入策略,bigDecimal会在某些情况下抛出exception。 为BigDecimal提供舍入策略会导致项目的总成本和适用的税收使用提供给BigDecimal的舍入策略进行舍入,从而改变所需的输出。

Java格式BigDecimal数字,带逗号和2位小数

我想用逗号和2个小数点格式化BigDecimal数字。 例如 Amount is: 5.0001 and formatted to: 5.00 Amount is: 999999999.999999 and formatted to: 999,999,999.99 Amount is: 1000.4999 and formatted to: 1,000.49 Amount is: 9999.089 and formatted to: 9,999.08 Amount is: 0.19999 and formatted to: 0.19 Amount is: 123456.99999999 and formatted to: 123,456.99