我在Ruby中使用包含java类
的正确脚本require 'java'
include_class 'java.math.BigDecimal'
include_class 'java.math.RoundingMode'
在脚本中我需要划分2个java.bigDecimal
one = BigDecimal.new("1")
number1 = BigDecimal.new("3")
number1 = one.divide(number1,RoundingMode.new(HALF_EVEN))
因为我在这个IDE中没有intellisense,所以我不确定语法是否正确,运行时错误是:
未初始化的常量:: HALF_EVEN
答案 0 :(得分:1)
尝试
number1 = one.divide(number1, RoundingMode::Half_EVEN)
答案 1 :(得分:0)
在Java中它会是RoundingMode.HALF_EVEN
;它是Ruby中的RoundingMode::HALF_EVEN
。您也可以使用int
常数重载(即BigDecimal::ROUND_HALF_EVEN
),但enum
重载绝对是可行的方法。
您可以使用divide(BigDecimal divisor, int scale, RoundingMode mode)
重载来控制商的比例。
这是一个Java代码段:
BigDecimal one = BigDecimal.ONE;
BigDecimal three = BigDecimal.valueOf(3);
System.out.println(one.divide(three, 10, RoundingMode.DOWN));
// prints "0.3333333333"
System.out.println(one.divide(three, 10, RoundingMode.UP));
// prints "0.3333333334"
System.out.println(one.divide(three, 333, RoundingMode.UNNECESSARY));
// throws java.lang.ArithmeticException: Rounding necessary
ArithmeticException
thrown during BigDecimal.divide
BigDecimal
无法准确表示1/3
(因为它具有非终止的十进制扩展)java.math.RoundingMode
java.math.BigDecimal
BigDecimal
由任意精度整数未缩放值和32位整数 scale 组成。如果为零或正数,则比例是小数点右侧的位数。如果是负数,则将数字的未缩放值乘以10来表示比例的否定。