【问题标题】:Setting Precision in float在浮点数中设置精度
【发布时间】:2016-01-25 13:33:05
【问题描述】:

我有以下代码

    float f = 125.0f;
    DecimalFormat form = new DecimalFormat("0.00");
    System.out.println(form.format(f));

form.format(f) 正在返回字符串,但我需要它是浮动的。 我想在不更改数据类型(即浮点数)的情况下为要打印的数据设置精度,我该怎么做。

【问题讨论】:

  • 如果您关心计算中的小数位精度,而不仅仅是为了显示,请重新考虑使用float。大多数小数点后两位数不能精确表示。 BigDecimal 可能更合适。

标签: java floating-point decimal


【解决方案1】:

您可以为此使用BigDecimal(另请参阅Javadoc)

float f = 125.0f;
BigDecimal value = new BigDecimal(f).setScale(2, RoundingMode.HALF_UP);
System.out.println(value.floatValue());

【讨论】:

  • 我将使用一个四舍五入的示例 +1
【解决方案2】:

float 在打印方面没有精度。它只是一个值。

您可以做的是对结果进行四舍五入,以便在打印时它的小数点后不超过 2 位。

public static float round2(float f) {
    final float factor = 1e2f;
    if (f < Integer.MIN_VALUE/factor || f > Integer.MAX_VALUE/factor)
       return f;
    return Math.round(f * factor) / factor;
}

注意:float 的精度很差,最好使用double 或考虑BigDecimal,它允许您控制要打印的小数位数。

要舍入double,您可以使用

public static double round2(double f) {
    final double factor = 1e2;
    if (f < Long.MIN_VALUE/factor || f > Long.MAX_VALUE/factor)
       return f;
    return Math.round(f * factor) / factor;
}

【讨论】:

    猜你喜欢
    • 2012-06-23
    • 2017-07-14
    • 1970-01-01
    • 2010-12-22
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多