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

Java 将类似于1.0、2.0的浮点值更改为1、2 |从浮点二进制点类型中删除尾随零,java,string,int,double,Java,String,Int,Double,我正在从API调用接收double值。该方法返回此类值2.0,2.344,2.034,3.1等 如果我收到像2.0,4.0这样的值,我想将它们转换为2,4。我只需要进行2.0,3.0类值的转换 如何实现这一点?您不能使用float或double来存储,因为它们是浮点二进制点类型,将导致1.0、2.0等。您可以使用String来存储格式化值: double myDouble = 3.0D; String i = myDouble == 0.0 ? "0" : myDouble / Math.flo

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

如果我收到像
2.0
4.0
这样的值,我想将它们转换为
2
4
。我只需要进行
2.0
3.0
类值的转换


如何实现这一点?

您不能使用
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);

不能使用
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);

假设这是一个将
双精度
值格式化为
字符串
的问题,确保后面没有不重要的零,我建议使用
十进制格式
来控制格式化。例如:

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

假设这是一个将
double
值格式化为
字符串的问题,确保没有尾随的不重要的零,我建议使用
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

听起来您应该查看
DecimalFormat
,假设您正在谈论将
值格式化为字符串。听起来您应该查看
DecimalFormat
,假设您正在讨论将
double
值格式化为字符串。我认为使用
DecimalFormat
更明智,它省略了尾随数字。依我看,您目前的做法存在太多潜在问题。(我还建议不要使用
“”+…
作为将值转换为字符串的方法-代码使用空字符串和字符串串联,两者都不相关。我会使用
字符串.valueOf(…)< /代码>这正是你想要达到的目标。)Jon Skestt,我不是你认为它的关联性。J.J.SkySt你可能想考虑取消你的下投票。不,因为我仍然认为这是一个检查整数的糟糕方法。这种字符串处理比使用专门的格式化机制
DecimalFormat
更糟糕。我认为使用省略尾随数字的
DecimalFormat
更明智。依我看,您目前的做法存在太多潜在问题。(我还建议不要使用
“”+…
作为将值转换为字符串的方法-代码使用空字符串和字符串串联,两者都不相关。我会使用
字符串.valueOf(…)< /代码>这正是你想要达到的目标。)Jon Skestt,我不是你认为它的关联性。J.J.SkySt你可能想考虑取消你的下投票。不,因为我仍然认为这是一个检查整数的糟糕方法。这种字符串处理比使用专用的格式化机制
DecimalFormat
更糟糕。我注意到这种方法比答案方法简单。你能解释一下这种方法的内在行为吗@乌玛:我不知道DecimalFormat的内部结构——我只是根据它的记录行为。我假设它工作正常,这意味着我们可以让它做我们想要的:)我注意到这个方法比答案一非常简单。你能解释一下这种方法的内在行为吗@乌玛:我不知道DecimalFormat的内部结构——我只是根据它的记录行为。我假设它工作正常,这意味着我们可以让它做我们想要的:)