【问题标题】:Showing and not showing dot and decimals in float values? [duplicate]在浮点值中显示和不显示点和小数? [复制]
【发布时间】:2013-12-18 13:28:48
【问题描述】:

如何使浮点值仅显示点和小数(如果存在)。例如显示 17 而不是 17.0 但如果我有 17.2 则显示点和小数。

谢谢!

【问题讨论】:

标签: java android xml floating-point decimal


【解决方案1】:

您可能还需要限制小数部分的长度,因为在一系列浮点运算之后可能会出现类似 12.00001 的结果。我用来很好地将双精度格式化为字符串的代码 sn-p:

private static final DecimalFormat[] formats= new DecimalFormat[]{
    null,
    new DecimalFormat("#.#"),
    new DecimalFormat("#.##"),
    new DecimalFormat("#.###"),
    new DecimalFormat("#.####")
};

public static String toConciseString(double d, int fractionLength){
    long asLong = (long) d;
    if(Math.abs(d - asLong) < 0.00001d){
        return Long.toString(asLong);
    }

    return formats[fractionLength].format(d);
}

显示输出示例的测试用例:

assertThat(toConciseString(23.323, 2)).isEqualTo("23.32");
assertThat(toConciseString(23.329, 2)).isEqualTo("23.33");
assertThat(toConciseString(23.329, 3)).isEqualTo("23.329");
assertThat(toConciseString(23.3, 2)).isEqualTo("23.3");
assertThat(toConciseString(23.30001, 2)).isEqualTo("23.3");
assertThat(toConciseString(23.00001, 2)).isEqualTo("23");

【讨论】:

    【解决方案2】:

    试试这个:

        DecimalFormat decimalFormat = new DecimalFormat("#0.##");
        float float1 = 1.00f;
        float float2 = 1.02f;
        System.out.println(decimalFormat.format(float1));
        System.out.println(decimalFormat.format(float2));
    

    它会打印出来:

    1
    1.02
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      相关资源
      最近更新 更多