想实现double保留5位小数,不四舍五入 请问各位大侠,想实现double保留5位小数,不四舍五入,应该怎么实现?想用转成String再截取,可是如果除不尽的循环小数,会不会溢出?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 溢出问题应该不会发生,字符串的字长要比double高。 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.33333333333333340.3333333333333334444444444444555555555555555然后截取字符串就好了。如果真的不要四舍五入,对字符串直接操作就好了。还要转换干什么呢? 用BigDecimal可提高精度范围 不过不四舍五入的话你取5位怎么都不准的~ 实际上浮点数是永远取不到精确数的 除非是能在有限位中除尽的~ 限制小数的位数可以用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了 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 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); 用BigDicmal是一种非常好的解决精度运算的方法。3楼已经给出答案 关于swing swt IE字体的绘制 请教一个文本框判断是否为数字问题! 关于单选按钮事件监听 移动图形的中间过程 java中字符串的颠倒怎么写? swt 怎样调用视频播放器? 请高手帮忙转一下下面几行代码,主要是类型转换,搞不懂 急:请教FileDialog类的setFilenameFilter()方法如何使用? jbuilder4有没有bug? 请问各位,这个编译成功的简单脚本为什么在运时无法启动? JAVA初级问题 看传智播客李勇jdbc的一个困惑
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然后截取字符串就好了。如果真的不要四舍五入,对字符串直接操作就好了。还要转换干什么呢?
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了
例如: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 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);