double a = 123456789.123456789;
String str = String.valueOf(a);
String str2 = Double.toString(a);
得到的值都是1.23456789123456789E8
怎么样才能得到原来的123456789.123456789啊
String str = String.valueOf(a);
String str2 = Double.toString(a);
得到的值都是1.23456789123456789E8
怎么样才能得到原来的123456789.123456789啊
用String的方法,取得‘.’和‘E’的位置,以及E后面的数字 n,再将字符串中的
‘.’后移n位 double a = 123456789.123456789;
String str = String.valueOf(a);
String str2 = Double.toString(a);
int dotIndex = str2.indexOf('.');
int eIndex = str2.indexOf('E');
int n = Integer.parseInt(str2.substring(eIndex));
String str3 = str2.substring(0,dotIndex) + str2.substring(dotIndex+1,dotIndex+1+n)
+"."+str2.substring(dotIndex+1+n);
public static void main(String[] args){
double source=123456789.123456789;
String target1=String.valueOf(source);
BigDecimal tmp=new BigDecimal(source);
String target=tmp.toString();
System.out.println(target);
}}
String str3 = str2.substring(0,dotIndex) + str2.substring(dotIndex+1,dotIndex+1+n)
+"."+str2.substring(dotIndex+1+n,eIndex);
BigDecimal d=new BigDecimal(a,MathContext.DECIMAL64);
String str = String.valueOf(d);
System.out.println(str);
DecimalFormat df1 = new DecimalFormat("0.##########");
System.out.println(df1.format(a));
BigDecimal bd=new BigDecimal(123456789.123456789);
System.out.println(bd.toString());
BigDecimal bd=new BigDecimal("123456789.123456789");
System.out.println(bd.toString());123456789.12345679
123456789.12345679104328155517578125
123456789.123456789如果在程序中直接写123456789.123456789得话,double类型精度有限,不能得到原来的值了
只能用BigDecimal bd=new BigDecimal("123456789.123456789");这样吗
double a = 123456789.123456789;String str = a+"";
就太直接了!
--------
当然不行
double a = 123456789.123456789; 系统没有这么搞的精度
public static void main(String [] args){
double c = 123456789.123456789;
String a=c+"";
System.out.println(a);
String num=a.substring(a.indexOf('E')+1,a.length());
int b=Integer.parseInt(num);
a=a.substring(0,a.indexOf('.'))+a.substring(a.indexOf('.')+1,a.indexOf('E'));
System.out.println(a);
a=a.substring(0,b+1)+"."+a.substring(b+1,a.length());
System.out.println(a); }
}
123456789.123456789直接打印1.2345678912345679E8所以导致一定的结果失真!
呵呵,数据类型的容量有限呀!哈哈~~~~~~~~~~~~~~~~~~~~~~~~~~~