Java 将类似于1.0、2.0的浮点值更改为1、2 |从浮点二进制点类型中删除尾随零
我正在从API调用接收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
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的内部结构——我只是根据它的记录行为。我假设它工作正常,这意味着我们可以让它做我们想要的:)