【问题标题】:Truncate a float and a double in java [duplicate]在java中截断浮点数和双精度数[重复]
【发布时间】:2012-05-07 03:13:12
【问题描述】:

我想在 java 中截断浮点数和双精度值。

以下是我的要求: 1. 如果我有 12.49688f,它应该打印为 12.49 不四舍五入 2.如果是双12.456,打印为12.45,不四舍五入 3. 无论如何,如果值是 12.0,它应该只打印为 12。

条件3要时刻牢记。它应该与截断逻辑并发。

【问题讨论】:

标签: java floating-point double truncate


【解决方案1】:

我用安卓也有同样的问题,你可以改用:

DecimalFormat df = new DecimalFormat("##.##");
df.setRoundingMode(RoundingMode.DOWN);

但是对于这个 API 级别 9 是必需的。

另一个快速的解决方案是:

double number = 12.43543542;
int aux = (int)(number*100);//1243
double result = aux/100d;//12.43

【讨论】:

    【解决方案2】:

    看看DecimalFormat() :

    DecimalFormat df = new DecimalFormat("#.##");
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setDecimalSeparator(',');
    df.setDecimalFormatSymbols(dfs);
    

    【讨论】:

    • 将其更改为使用# 而不是0,它将按指定工作。
    【解决方案3】:

    查看java.math.BigDecimal.round(MathContext).

    【讨论】:

    【解决方案4】:
    double d = <some-value>;
    System.out.println(String.format("%.2f", d - 0.005);
    

    【讨论】:

      【解决方案5】:

      试试这个-

      DecimalFormat df = new DecimalFormat("##.##");
      df.setRoundingMode(RoundingMode.DOWN);
      System.out.println(df.format(12.49688f));
      System.out.println(df.format(12.456));
      System.out.println(df.format(12.0));
      

      在这里,我们使用十进制格式化程序进行格式化。 roundmode 设置为 DOWN,因此不会自动舍入小数位。

      预期结果是:

      12.49
      12.45
      12
      

      【讨论】:

      • 本地化适用于示例。例如,根据默认语言环境,输出将为 12,49。
      【解决方案6】:

      尝试使用DecimalFormat 并设置RoundingMode 以匹配您的需要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多