我需要在将浮点数转换为字符串时避免使用舍入数字,我需要的数字完全相同。
在这一刻,如果我这样做:
String value = String.valueOf(1234567.99);
值= 1234568.0,所以在施法后我需要值= 1234567.99。
答案 0 :(得分:3)
1234567.99
无法准确表示为浮点数。最近的浮点数实际上等于1234568。
如果你想要更高的精确度,你可以使用双倍:1234567.99d
会做你期望的。
你可以运行这个简单的测试来检查它(它是Java,但可以通过替换println
在android上轻松转换):
public static void main(String[] args) {
float f = 1234567.99f;
double d = 1234567.99d;
System.out.println(new BigDecimal(f));
System.out.println(new BigDecimal(d));
}
打印:
1234568
1234567.98999999999068677425384521484375
注意:String.valueOf(double)
将double转换为另一个具有相同double的小数字的表示形式。换句话说,正如您在上面看到的那样,1234567.99d
无法表示为double,而最近的double是1234567.98999999999068677425384521484375
。但是String.valueOf
计算它并使用该双精度的第一个表示(只有2个小数),因为根据语言的规范,它们实际上是相同的双精度。
答案 1 :(得分:1)
String.valueOf()
永远不会将您遇到的其他任何问题都解决掉,但您可以尝试:
String value = ""+1234567.99;
答案 2 :(得分:0)
String s = Double.toString(1234567.99);
更新:要更好地控制字符串的格式,请使用DecimalFormat和DecimalFormatSymbols
例如:
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);