【问题标题】:DecimalFormat roundingDecimalFormat 舍入
【发布时间】:2011-06-22 22:09:41
【问题描述】:

这是说明我所看到的小代码

float floater = 59.999f;

DecimalFormat df = new DecimalFormat("00.0");

System.out.println(df.format(floater));

打印出来:

60.0

我想打印出来

59.9

我需要做什么?

【问题讨论】:

    标签: java floating-point decimal


    【解决方案1】:

    在使用DecimalFormat之前添加这一行:

    df.setRoundingMode(RoundingMode.DOWN);
    

    查看其他舍入模式,看看哪一种最适合您。

    注意:此方法仅适用于 JDK 1.6 或更高版本

    【解决方案2】:
    float d = 59.999f;
    BigDecimal bd = new BigDecimal(d);
    // Use the returned value from setScale, as it doesn't modify the caller.
    bd = bd.setScale(1, BigDecimal.ROUND_FLOOR);
    String formatted = bd.toString();
    

    【讨论】:

    • 通常这是一个错误的决定,因为它会更改数据,而我们只需要更改视图
    • @om-nom-nom:我宁愿说这太慢了。并且需要创建一个 BigDecimal。但至于它是如何“改变数据”的——我看不到......原来的浮点数没有受到影响,可以被任何东西使用。您能否详细说明您的评论?
    • @ppeterka 公平点。比一年前还少,可能我是从 我如何舍入我的 bigdecimal 的角度思考,现在不能说
    • 赞成,这个答案没有错,尤其是对于 java 1.5 或更低版本。同样如上所述,即使您已经从 BigDecimal 开始,它也不会更改数据; BigDecimal.setScale 返回 BigDecimal 的新实例,并且不会更改原始实例。 "请注意,由于 BigDecimal 对象是不可变的,因此调用此方法不会导致修改原始对象"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多