想用转成String再截取,可是如果除不尽的循环小数,会不会溢出?谢谢!
12 个解决方案
#1
不四舍五入是不可能的,由于浮点数的表示有一个精度问题,所以系统在给出计算结果前,就已经进行四舍五入了!如果在这个基础上不进行四舍五入的话,转成字符串,直接截取就行了!不存在溢出的!
#2
溢出问题应该不会发生,字符串的字长要比double高。
#3
Double db = new Double("0.3333333333333334444444444444555555555555555");
System.out.println("Double is:" +db);
BigDecimal bp2 = new BigDecimal("0.3333333333333334444444444444555555555555555");
//你的小数的位数是多少,精度就是多少。
String str = bp2.toString();
System.out.println(str);
输出:
Double is:0.3333333333333334
0.3333333333333334444444444444555555555555555
然后截取字符串就好了。如果真的不要四舍五入,对字符串直接操作就好了。还要转换干什么呢?
#4
不四舍五入的话,楼主的意思是直接忽视5位以后的吗?
#5
用BigDecimal可提高精度范围 不过不四舍五入的话你取5位怎么都不准的~ 实际上浮点数是永远取不到精确数的 除非是能在有限位中除尽的~
#6
*100000
取整,
取整,
#7
限制小数的位数可以用DecimalFormat 如下:
java.text.DecimalFormat df = new java.text.DecimalFormat( "0.000");
String result=df.format(your double value);
其中0.000中小数点后的0表示要保留小数的位数,result为返回的具有要求的小数位数的串,再转化为相应的double就可以了,如果是进行大数的处理的话可以使用BigDecimal,它有几个不构造函数,其中有参数可以定义精度,具体可以看下API就OK了
java.text.DecimalFormat df = new java.text.DecimalFormat( "0.000");
String result=df.format(your double value);
其中0.000中小数点后的0表示要保留小数的位数,result为返回的具有要求的小数位数的串,再转化为相应的double就可以了,如果是进行大数的处理的话可以使用BigDecimal,它有几个不构造函数,其中有参数可以定义精度,具体可以看下API就OK了
#8
double保留5位小数,这个问题还和指数有关。
例如:double a = 0.12345678, b=123.456789;
是不是想得到 a=0.12345, b=123.45678的结果呢?
那 double a=1.2345678e-1, b=1.23456789e+2的结果又是什么呢?
double,可以说他的精度有多少多少位,单独说小数多少多少位是没意义的。
比方说 1.2345678e+123456789123456789,不要说小数部分,十位个位的数都不能保证精度了。
如果真的是要保证小数位的精度,那就用long,63位全部用来保存有效位的。 而double只有52位来保存有效数字。
例如:double a = 0.12345678, b=123.456789;
是不是想得到 a=0.12345, b=123.45678的结果呢?
那 double a=1.2345678e-1, b=1.23456789e+2的结果又是什么呢?
double,可以说他的精度有多少多少位,单独说小数多少多少位是没意义的。
比方说 1.2345678e+123456789123456789,不要说小数部分,十位个位的数都不能保证精度了。
如果真的是要保证小数位的精度,那就用long,63位全部用来保存有效位的。 而double只有52位来保存有效数字。
#9
double d1 = 3.1415926;
int i = (int)(d1*100000);
double d2 = (double)i/100000 ;
System.out.print(d2);
你看看这样行不行?
上面的代码还能改改
int i = (int)(d1*100000);
System.out.print((double)i/100000);
#10
保留六位,去掉最后一位
#11
才保留5位的话是完全没问题的··你可以在第7位的时候使用四舍五入啊··这样对结果也没什么影响··
#12
用BigDicmal是一种非常好的解决精度运算的方法。3楼已经给出答案
#1
不四舍五入是不可能的,由于浮点数的表示有一个精度问题,所以系统在给出计算结果前,就已经进行四舍五入了!如果在这个基础上不进行四舍五入的话,转成字符串,直接截取就行了!不存在溢出的!
#2
溢出问题应该不会发生,字符串的字长要比double高。
#3
Double db = new Double("0.3333333333333334444444444444555555555555555");
System.out.println("Double is:" +db);
BigDecimal bp2 = new BigDecimal("0.3333333333333334444444444444555555555555555");
//你的小数的位数是多少,精度就是多少。
String str = bp2.toString();
System.out.println(str);
输出:
Double is:0.3333333333333334
0.3333333333333334444444444444555555555555555
然后截取字符串就好了。如果真的不要四舍五入,对字符串直接操作就好了。还要转换干什么呢?
#4
不四舍五入的话,楼主的意思是直接忽视5位以后的吗?
#5
用BigDecimal可提高精度范围 不过不四舍五入的话你取5位怎么都不准的~ 实际上浮点数是永远取不到精确数的 除非是能在有限位中除尽的~
#6
*100000
取整,
取整,
#7
限制小数的位数可以用DecimalFormat 如下:
java.text.DecimalFormat df = new java.text.DecimalFormat( "0.000");
String result=df.format(your double value);
其中0.000中小数点后的0表示要保留小数的位数,result为返回的具有要求的小数位数的串,再转化为相应的double就可以了,如果是进行大数的处理的话可以使用BigDecimal,它有几个不构造函数,其中有参数可以定义精度,具体可以看下API就OK了
java.text.DecimalFormat df = new java.text.DecimalFormat( "0.000");
String result=df.format(your double value);
其中0.000中小数点后的0表示要保留小数的位数,result为返回的具有要求的小数位数的串,再转化为相应的double就可以了,如果是进行大数的处理的话可以使用BigDecimal,它有几个不构造函数,其中有参数可以定义精度,具体可以看下API就OK了
#8
double保留5位小数,这个问题还和指数有关。
例如:double a = 0.12345678, b=123.456789;
是不是想得到 a=0.12345, b=123.45678的结果呢?
那 double a=1.2345678e-1, b=1.23456789e+2的结果又是什么呢?
double,可以说他的精度有多少多少位,单独说小数多少多少位是没意义的。
比方说 1.2345678e+123456789123456789,不要说小数部分,十位个位的数都不能保证精度了。
如果真的是要保证小数位的精度,那就用long,63位全部用来保存有效位的。 而double只有52位来保存有效数字。
例如:double a = 0.12345678, b=123.456789;
是不是想得到 a=0.12345, b=123.45678的结果呢?
那 double a=1.2345678e-1, b=1.23456789e+2的结果又是什么呢?
double,可以说他的精度有多少多少位,单独说小数多少多少位是没意义的。
比方说 1.2345678e+123456789123456789,不要说小数部分,十位个位的数都不能保证精度了。
如果真的是要保证小数位的精度,那就用long,63位全部用来保存有效位的。 而double只有52位来保存有效数字。
#9
double d1 = 3.1415926;
int i = (int)(d1*100000);
double d2 = (double)i/100000 ;
System.out.print(d2);
你看看这样行不行?
上面的代码还能改改
int i = (int)(d1*100000);
System.out.print((double)i/100000);
#10
保留六位,去掉最后一位
#11
才保留5位的话是完全没问题的··你可以在第7位的时候使用四舍五入啊··这样对结果也没什么影响··
#12
用BigDicmal是一种非常好的解决精度运算的方法。3楼已经给出答案