Java 在将浮点数转换为字符串时避免使用整数

Java 在将浮点数转换为字符串时避免使用整数,java,android,Java,Android,我需要避免在将浮点数转换为字符串时使用整数,我需要数字完全相同 在这一刻,如果我这样做: String value = String.valueOf(1234567.99); 值为1234568.0,因此我需要在铸造后使用值为1234567.99。String.valueOf()请不要对任何数字进行四舍五入。如果您有其他问题,可以尝试以下方法: String value = ""+1234567.99; String.valueOf()如果您有其他问题,请不要对任何数字进行四舍五入,但您

我需要避免在将浮点数转换为字符串时使用整数,我需要数字完全相同

在这一刻,如果我这样做:

String value =  String.valueOf(1234567.99);
值为1234568.0,因此我需要在铸造后使用值为1234567.99。

String.valueOf()
请不要对任何数字进行四舍五入。如果您有其他问题,可以尝试以下方法:

String value =  ""+1234567.99;
String.valueOf()
如果您有其他问题,请不要对任何数字进行四舍五入,但您可以尝试以下方法:

String value =  ""+1234567.99;

1234567.99
不能精确表示为浮点。最近的浮动实际上等于1234568

如果您想要更高的精度,可以使用双精度:
1234567.99d
将实现您所期望的效果

您可以运行这个简单的测试来检查它(它是用Java编写的,但是通过替换
println
,在android上很容易转换):

印刷品:

1234568
1234567.9899999909068774253845521484375


注意:
String.valueOf(double)
会将double四舍五入为同一个double的另一个表示形式,小数位数较少。换句话说,如上所述,
1234567.99d
不能表示为双精度,最近的双精度是
1234567.989999990686774253845521484375
。但是
String.valueOf
计算出来并使用该双精度的第一个表示形式(只有2个小数),因为根据语言的规范,它们实际上是相同的双精度。

1234567.99
不能准确地表示为浮点。最近的浮动实际上等于1234568

String s = Double.toString(1234567.99);
如果您想要更高的精度,可以使用双精度:
1234567.99d
将实现您所期望的效果

您可以运行这个简单的测试来检查它(它是用Java编写的,但是通过替换
println
,在android上很容易转换):

印刷品:

1234568
1234567.9899999909068774253845521484375

注意:
String.valueOf(double)
会将double四舍五入为同一个double的另一个表示形式,小数位数较少。换句话说,如上所述,
1234567.99d
不能表示为双精度,最近的双精度是
1234567.989999990686774253845521484375
。但是
String.valueOf
计算出它并使用该双精度的第一个表示形式(只有2个小数),因为根据语言规范,它们实际上是相同的双精度

String s = Double.toString(1234567.99);
更新:要更多地控制字符串的格式,请使用和

例如:

java.text.DecimalFormat formater = new java.text.DecimalFormat();
formater.setMinimumFractionDigits(0);
formater.setMaximumFractionDigits(3);
formater.setGroupingUsed(false);
java.text.DecimalFormatSymbols dfs = new java.text.DecimalFormatSymbols();
dfs.setNaN("NaN");
formater.setDecimalFormatSymbols(dfs);
String s = formater.format(1234567.99);
更新:要更多地控制字符串的格式,请使用和

例如:

java.text.DecimalFormat formater = new java.text.DecimalFormat();
formater.setMinimumFractionDigits(0);
formater.setMaximumFractionDigits(3);
formater.setGroupingUsed(false);
java.text.DecimalFormatSymbols dfs = new java.text.DecimalFormatSymbols();
dfs.setNaN("NaN");
formater.setDecimalFormatSymbols(dfs);
String s = formater.format(1234567.99);

我认为是其他原因导致了这个问题。String.valueOf不舍入。无法复制:String s=String.valueOf(1234567.99);系统输出打印项次;打印1234567。99@EvgeniyDorofeev尝试
String s=String.valueOf(1234567.99f)
(注意
f
,使其成为浮点,而不是双精度)@EvgeniyDorofeev是一个公平点。但是,如果您更喜欢他关于“float”的注释而不是他的示例代码,则可以使用String.valueOf(1234567.99F)String value=String.valueOf(1234567.99-0.5)进行复制;我认为是其他原因导致了这个问题。String.valueOf不舍入。无法复制:String s=String.valueOf(1234567.99);系统输出打印项次;打印1234567。99@EvgeniyDorofeev尝试
String s=String.valueOf(1234567.99f)
(注意
f
,使其成为浮点,而不是双精度)@EvgeniyDorofeev是一个公平点。但是,如果您更喜欢他关于“float”的注释而不是他的示例代码,则可以使用String.valueOf(1234567.99F)String value=String.valueOf(1234567.99-0.5)进行复制;在您的示例中,数字是双精度的,而不是浮点数。在您的示例中,数字是双精度的,而不是浮点数。是的,支持比浮点数大的双位数,它的精度非常高。是的,支持比浮点数大的双位数,它的精度非常高