String转double的问题

sparadise1003 2012-08-03 10:03:01
1、String str = "199.45"
Double.parseDouble( str );
结果不是199.45,而是199.4499999999999990
2、a=19 , b=99.63;
c = a*b
结果不是1892.97,而是1892.96999999999998

这是怎么回事呢?
...全文
1253 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiutian1990 2012-08-05
  • 打赏
  • 举报
回复
double精度原因。。。
老紫竹 2012-08-03
  • 打赏
  • 举报
回复
double本身就不是准确的,别纠结这个。

解决方法

原始数据*100,去掉小数点。 只做整数的操作。
sparadise1003 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

要精确计算的时候不要使用float和double,是近似值
DecimalFormat dc = new DecimalFormat();
double num = (Double)dc.parse(s);

BigDecimal bd1 = new BigDecimal(Integer.toString(a));
BigDecimal bd2 = new BigDecimal(Dou……
[/Quote]

不好用啊,显示的还和以前一样啊!
licip 2012-08-03
  • 打赏
  • 举报
回复
+1[Quote=引用 2 楼 的回复:]
double的精度问题
如果要精确计算,可以使用BigDicemal
如果要按要求显示,可以自己format

Java code
a=19 , b=99.63;
c = a*b
String s = String.format("%.2f", c);
[/Quote]
kiss_xixi413 2012-08-03
  • 打赏
  • 举报
回复
DecimalFormat dc = new DecimalFormat();
double num = (Double)dc.parse(s);

BigDecimal bd1 = new BigDecimal(Integer.toString(a));
BigDecimal bd2 = new BigDecimal(Double.toString(b));
double c = bd1.multiply(bd2).doubleValue();
LY198196 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

要精确计算的时候不要使用float和double,是近似值
DecimalFormat dc = new DecimalFormat();
double num = (Double)dc.parse(s);

BigDecimal bd1 = new BigDecimal(Integer.toString(a));
BigDecimal bd2 = new BigDecimal(Dou……
[/Quote]


这个兄弟说得是对的
qybao 2012-08-03
  • 打赏
  • 举报
回复
double的精度问题
如果要精确计算,可以使用BigDicemal
如果要按要求显示,可以自己format
a=19 , b=99.63;
c = a*b
String s = String.format("%.2f", c);
sffx123 2012-08-03
  • 打赏
  • 举报
回复
要精确计算的时候不要使用float和double,是近似值
DecimalFormat dc = new DecimalFormat();
double num = (Double)dc.parse(s);

BigDecimal bd1 = new BigDecimal(Integer.toString(a));
BigDecimal bd2 = new BigDecimal(Double.toString(b));
double c = bd1.multiply(bd2).doubleValue();
sffx123 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 1 楼 的回复:

要精确计算的时候不要使用float和double,是近似值
DecimalFormat dc = new DecimalFormat();
double num = (Double)dc.parse(s);

BigDecimal bd1 = new BigDecimal(Integer.toString(a));
BigDecimal bd2 = ne……
[/Quote]你敢告诉我你怎么用的吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧