String->double的转换问题
我现在有一个String型的数据a=120.25473154602059
要将它转换成double型的怎么转换?
使用Double.parseDouble(a);会得到
120.2547315460206 怎么办?????
问题点数:50、回复次数:33Top
1 楼windindance(风舞轻扬·白首为功名)回复于 2005-10-26 09:57:57 得分 2
精度问题。使用BigDecimal类Top
2 楼yanxiazhiqiu(if the words don't come my way...)回复于 2005-10-26 09:59:53 得分 1
小数点后边只能是这些位了吧?Top
3 楼chenyulin(chen)回复于 2005-10-26 09:59:56 得分 5
怎么没人回答?帮你顶一下Top
4 楼yanxiazhiqiu(if the words don't come my way...)回复于 2005-10-26 10:13:27 得分 2
String a="120.2547315460205909813";
BigDecimal c=new BigDecimal(a);
System.out.println(c.doubleValue());
这样结果一样的。关注下,hehe ~~Top
5 楼windindance(风舞轻扬·白首为功名)回复于 2005-10-26 10:34:41 得分 2
>>System.out.println(c.doubleValue());
这个结果当然是错误的,因为相当于把数据又转回double类型,造成精度丢失。
String a="120.2547315460205909813";
BigDecimal c=new BigDecimal(a);
System.out.println(c.toString());
可以看到,结果是正确的数据。Top
6 楼cjhyahoo(野虎)回复于 2005-10-26 10:36:56 得分 2
String a="120.2547315460205909813";
BigDecimal c=new BigDecimal(a);
System.out.println(c.toString());
Top
7 楼Croatia(Croatia)回复于 2005-10-26 10:38:15 得分 2
这个和double的类型范围有关系,
double只能有15位,包括小数点以后的数字。
所以,用什么构造都一样的。Top
8 楼Croatia(Croatia)回复于 2005-10-26 10:39:01 得分 1
说错了,是精度是15位。Top
9 楼Croatia(Croatia)回复于 2005-10-26 10:47:55 得分 1
BigDecimal 只是让他显示对了,他用来计算以后,就会出错的。
这个是Double的精度决定的。Top
10 楼lcllcl987(毛爷爷)回复于 2005-10-26 11:31:00 得分 1
学习Top
11 楼windindance(风舞轻扬·白首为功名)回复于 2005-10-26 11:48:28 得分 2
>>BigDecimal 只是让他显示对了,他用来计算以后,就会出错的。
不能转换为double后计算,应使用BigDecimal 的计算函数。Top
12 楼yanxiazhiqiu(if the words don't come my way...)回复于 2005-10-26 12:19:43 得分 1
学习了。
learning~~Top
13 楼yyouyou(一塌)回复于 2005-10-26 12:24:23 得分 1
使用java.math.BigDecimal类Top
14 楼laxxx6(laxxx3)回复于 2005-10-26 12:34:59 得分 1
是精度的问题,,,最好在字符串的时候就加个PAN断的过程,,以适应要转型的精度...Top
15 楼lcllcl987(毛爷爷)回复于 2005-10-26 14:27:35 得分 4
BigDecimal有自己的算术方法:
例如求120.2547315460205909813 + 0.02的和
import java.math.BigDecimal;
public class BigDecimalTest {
public static void main(String[] args) {
String a="120.2547315460205909813";
BigDecimal c=new BigDecimal(a);
c = c.add(new BigDecimal("0.02"));
System.out.println(c.toString());
}
}Top
16 楼dl007(dl007)回复于 2005-10-26 15:44:21 得分 1
上面给你讲的很清楚,bigdecimal转换又没有精度问题,很好
Top
17 楼boyu_song(我这样会不会遭天谴,我只是想看看这个论坛的ID最大可以多大?)回复于 2005-10-26 16:07:12 得分 1
double b=120.000000000000001;
System.out.println(b);
这样都不可以,楼主,明白没?Top
18 楼boyu_song(我这样会不会遭天谴,我只是想看看这个论坛的ID最大可以多大?)回复于 2005-10-26 16:10:33 得分 1
或者你可以考虑一下用算法来解决,把你的String分解成两个,用的时候再分两次转。Top
19 楼wizardblue()回复于 2005-10-26 16:15:05 得分 1
楼主我想问你,你转成double想干嘛,?double本来就是这样子的!!!
Top
20 楼ianok(再菜我也要up出個星來)回复于 2005-10-26 17:20:38 得分 1
upTop
21 楼kingdom_seu()回复于 2005-10-26 17:33:18 得分 1
learning!!~~~~~~~Top
22 楼bixuehui(边疆)回复于 2005-10-26 17:44:25 得分 1
upTop
23 楼Croatia(Croatia)回复于 2005-10-27 10:14:02 得分 2
To:windindance(风舞轻扬) ( )
不能转换为double后计算,应使用BigDecimal 的计算函数。
————————————————————————
不能转换成double,我知道。一转换精度就不对了。
但是,BigDecimal的算法也有限。不一定可以满足所有的人的要求。Top
24 楼windindance(风舞轻扬·白首为功名)回复于 2005-10-27 10:17:43 得分 1
>>BigDecimal的算法也有限。不一定可以满足所有的人的要求。
有什么算法不能实现,可以提出来,看看能不能实现。
总比double类型精度达不到好。Top
25 楼pigo()回复于 2005-10-27 10:48:28 得分 2
如果你实在很懒的话,就给Class加上 strictfp 修饰:
http://www.google.com/search?q=strictfp&hl=zh-CN&lr=lang_zh-CN&ie=gb2312
Top
26 楼yzr520()回复于 2005-10-27 15:36:59 得分 1
说的都有道理啊 。不我我自己认为什么转也回丢失精度。Top
27 楼pauliuyou(paul)回复于 2005-10-27 16:01:48 得分 1
学习.Top
28 楼wtd(浪花)回复于 2005-10-27 16:37:58 得分 2
String a="120.2547315460205909813";
BigDecimal c=new BigDecimal(a);
System.out.println(c);Top
29 楼nixiangtama(中国IT人才网(www.itbbs.net.cn))回复于 2005-10-27 16:56:48 得分 0
我顶!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
免费招聘、求职。IT人工作的天堂。希望能够为大家所用。Top
30 楼nixiangtama(中国IT人才网(www.itbbs.net.cn))回复于 2005-10-27 17:00:50 得分 0
我顶!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
中国IT人才网( http://www.itbbs.net.cn )!
免费招聘、求职。IT人工作的天堂。希望能够为大家所用。Top
31 楼Mark_Chen(雨枫)回复于 2005-10-27 18:10:29 得分 2
String a="120.2547315460205909813";
BigDecimal c=new BigDecimal(a);
System.out.println(c.toString());
Top
32 楼nationally(自由鸟)回复于 2005-10-27 19:41:46 得分 2
String a="120.2547315460205909813";
System.out.println((new BigDecimal(a)).toString());
Top
33 楼Croatia(Croatia)回复于 2005-10-31 10:43:59 得分 2
To:windindance(风舞轻扬·白首为功名)
>>BigDecimal的算法也有限。不一定可以满足所有的人的要求。
有什么算法不能实现,可以提出来,看看能不能实现。
---------------------------------
java.lang.Math里面的对数,指数等等。只是随便举了例子。
总比double类型精度达不到好。
---------------------------------
对,是总比达不到的好。赫赫。不过,看怎么看待这个问题了。有什么样的具体需求,等等。
Top




