【问题标题】:Java - how to round a calculation statement result to two significant figuresJava - 如何将计算语句结果四舍五入为两位有效数字
【发布时间】:2012-07-12 06:00:46
【问题描述】:

Java 新手,编程相对较新。下面的代码是已经完美运行的程序的最后几行——我只想对最终结果(newTuition 变量)进行四舍五入并将其限制为两位有效数字。

newTuition、TUITIONINCREASE 和学费都是双倍的。

    newTuition = ((TUITIONINCREASE * .01) * tuition) + tuition + ".");
    System.out.println("Your current tuition is $" + tuition + ". It will rise next year by " + TUITIONINCREASE + "% and " +
    "your new tuition will be $" + newTuition);

【问题讨论】:

  • 欢迎来到 SO:你说你对编程比较陌生,所以这里有一个免费的教训:不要使用浮点类型来存储货币值。 (谷歌它有无数的原因解释)
  • 你可以参考[这个帖子][1]。 [1]:stackoverflow.com/questions/153724/…
  • 除了使用 double 存储资金的愚蠢想法(如 @John3136 所述)之外,您的代码的第一行在编译时失败。显然你不能附加一个“。”以双倍值结束期望得到双倍的回报。也许newTution毕竟是String?
  • lismorski,是的,那个时期是复制粘贴错误。是的,既然你们都告诉我了,我觉得使用浮点类型来表示货币价值很愚蠢。我们还没有学到任何关于 BigDecimal 的知识,因为这是我使用其中一些变量/常量进行计算的唯一代码行,所以我认为讲师会活下来。 ;)
  • 感谢关伦的链接。我去看看。

标签: java double rounding significant-digits


【解决方案1】:

评论者是正确的。不要为此使用浮点数。您需要的是 BigDecimal 类。这将在数​​学运算期间为您保留精度,并包含舍入和截断的方法。

http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html

【讨论】:

  • 感谢 jjathman 的链接。我将带自己到 API 并解决这个问题。
【解决方案2】:

使用 BigDecimal.Round:http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html#round(java.math.MathContext

像这样:

BigDecimal rounded = value.round(new MathContext(2, RoundingMode.HALF_UP));
System.out.println(value + ": " + rounded);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多