【问题标题】:How to set scale for Math.Context in Java?如何在 Java 中为 Math.Context 设置比例?
【发布时间】:2020-07-26 09:39:44
【问题描述】:

我在编码中使用 Math.Context。现在的问题是 Math.Context 正在计算小数点后的所有内容。我想为 Math.Context 定义 8 的比例(表示小数点后 8 位)。请注意,我不是在寻找精确度。我知道如何定义精度。我需要规模。

这是我的 Math.Context 代码行:

answer =  firstvalue.multiply(secondvalue).divide(new BigDecimal("1240"), MathContext.DECIMAL32);

【问题讨论】:

  • edit 将您拥有的完整源代码包含在minimal reproducible example 中。显示您拥有的示例输入和您想要获得的结果。还要写下可能的输入值,例如最小值和最大值。始终保留 8 位小数会导致动态精度取决于值。也可以考虑用整数计算,最后除以10^8得到8位小数。
  • 你没有。 MathContext 没有“比例”属性。但是BigDecimal 可以。

标签: java mathcontext


【解决方案1】:

你可以按照你的要求去做。我向你展示了如何,但在此之前我想告诉你,你必须在BigDecimalsetScale()。在这种情况下,我假设答案变量是 BigDecimal 。这是你的答案

answer =  firstvalue.multiply(secondvalue).divide(new BigDecimal("1240"), MathContext.DECIMAL32);
answer = answer.setScale(5, RoundingMode.HALF_EVEN); 
// YOU CAN SET YOUR OWN DESIRED SCALE OR ROUNDINGMODE

【讨论】:

    【解决方案2】:

    MathContext 类的构造函数或辅助方法中没有参数来设置比例。您可以尝试 BigDecimal,其中比例可以指定为

    在divide参数中,参数可以如下传递,

    BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

    firstvalue.multiply(secondvalue).divide(new BigDecimal("1240"), 4, RoundingMode.FLOOR);
    

    对 MathContext javadoc 的引用:https://docs.oracle.com/javase/7/docs/api/java/math/MathContext.html

    【讨论】:

    • divideramount 是十进制,已经定义并具有值
    • 你可以使用divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多