代码之家  ›  专栏  ›  技术社区  ›  uma

将1.0、2.0等浮点值更改为1、2 |从浮点二进制点类型中删除尾随零

  •  0
  • uma  · 技术社区  · 8 年前

    我正在接收 double API调用中的值。该方法返回此类值 2.0 , 2.344 , 2.034 , 3.1

    如果我收到如下值 2 , 4.0 ,我想转换它们 2 , 4 . 我只需要做这个转换 2 , 3.0 类似的值。

    我怎样才能做到这一点?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Jon Skeet    8 年前

    假设这是 格式化 double 值作为 String ,确保没有不重要的尾随零,我建议使用 DecimalFormat 控制格式。例如:

    import java.text.*;
    import java.util.*;
    
    class Test {
        public static void main(String[] args) throws Exception {
            print(5.0d);
            print(5.000000001d);
            print(5.1d);
            print(123456789.1d);
            print(12345e-50);
        }
    
        private static void print(double value) {
            NumberFormat format = new DecimalFormat(
                "0.############",
                DecimalFormatSymbols.getInstance(Locale.US));
            String text = format.format(value);
            System.out.println(text);
        }
    }
    

    注意使用 Locale.US 始终以点作为小数分隔符结束。

    中的最后一个示例 main 显示此处的限制-非常接近0的数字将被格式化为“0”,因为我没有提供足够的可选数字( # 零件)以更适当地设置其格式。不过,目前还不清楚在这些情况下你想要什么;默认表示形式为 1.2345E-46 .

        2
  •  1
  •   Aniket Sahrawat    8 年前

    您不能使用 float double 存储,因为它们是浮点二进制点类型,将导致 1.0 , 2.0 等。您可以使用 String 要存储格式化的值,请执行以下操作:

    double myDouble = 3.0D;
    String i = myDouble == 0.0 ? "0" : myDouble / Math.floor(myDouble) == 1.0 ? String.format("%.0f", myDouble) : String.valueOf(myDouble);
    System.out.println(i);