我遇到了这个问题,就是我无法向BigDecimal添加整数。在代码中,我查看了错误,它说“二进制运算符的错误操作数类型'+'”。如何向BigDecimal添加整数? (代码为1 + sqf)
BigDecimal sqf = new BigDecimal(Math.sqrt(5));
sqf.setScale(100);
BigDecimal bd = new BigDecimal((1 + sqf) / 2); //Error here (1 + sqf)
bd.setScale(100);
System.out.println(isBuzzNumber(77707));
System.out.println(findHypotenuse(9, 10));
System.out.println("Phi (φ) = " + bd);
答案 0 :(得分:2)
BigDecimal bd = BigDecimal.ONE.add(sqf).divide(new BigDecimal(2))
标准运算符仅适用于基元。
答案 1 :(得分:1)
您必须使用其中一种格式进行投射。 BigDecimal是不可变的。
例如
sqf = sqf.add(new BigDecimal(1));
您可以通过构建新的BigDecimal类来添加。
答案 2 :(得分:1)
BigDecimal
实例作为操作数。答案 3 :(得分:1)
数学符号(+ - * /)仅适用于String中的字符串和primitive types BigDecimal和BigInteger不是原始类型,因此您不能直接使用数学符号 当你想进行数学计算时,请考虑使用实例的方法。
答案 4 :(得分:0)
您可以使用the BigDecimal(int)
constructor从整数中创建BigDecimal,如new BigDecimal(1)
或BigDecimal.ONE
(感谢Herp Derpington)。
与Integer和Double一样,`BigDecimal实例是不可变,这意味着任何一个BigDecimal实例都不会改变值,因此你可以共享或重用代表相同数字的实例< / em>的
与Integer和Double不同,BigDecimal不参与 autoboxing ,这是从int
原语到Integer
对象实例的转换(以及其他类型的转换)。在Java中,+
和/
等运算符仅适用于基元;虽然您可以致电sqf.add(BigDecimal.ONE)
,但无法使用+
或致电sqf.add(1)
。
要对BigDecimal实例进行操作,您需要将自己约束到其方法(例如add
和divide
),并传入BigDecimal实例(如果需要,可以新创建)。特别是divide
提供了许多方法重载,允许您选择舍入或缩放数字的方式 - 这是内置浮动的优势之一 - 分裂;如果您遇到问题,可以指定ROUND_TO_EVEN
,其中最匹配the IEEE 754 behavior in the Java Language spec。
答案 5 :(得分:0)
你也可以像这样使用BigDecimal对象的intvalue()函数:
BigDecimal bd = new BigDecimal((1 + sqf.intValue())/ 2);