修改代码

liumingwei2009 2009-10-11 10:30:17
import javax.swing.JOptionPane;
public class One {
public static void main(String[] args) {
String str = JOptionPane.showInputDialog("请输入一个浮点数");
Double i = Double.parseDouble(str);

double j = Math.floor(i);
double k = i - j;
System.out.println(i + "的整数部分是:" + j);
System.out.println(i + "的小数部分是:" + k);

}
}


为什么我输入1.2它的小数部分成了1.999999999996啊?该怎么改正呢?
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
feng_jyie 2009-10-12
  • 打赏
  • 举报
回复
1楼
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
中的BigDecimal.ROUND_HALF_UP应改为 BigDecimal.ROUND_DOWN
liumingwei2009 2009-10-12
  • 打赏
  • 举报
回复
我把分给四楼的了
loveofmylife 2009-10-11
  • 打赏
  • 举报
回复
import java.math.BigDecimal;

import javax.swing.JOptionPane;
public class One {
public static void main(String[] args) {
String str = JOptionPane.showInputDialog("请输入一个浮点数");
Double i = Double.parseDouble(str);

double j = Math.floor(i);
BigDecimal b1=new BigDecimal(i+"");
BigDecimal b2=new BigDecimal(j+"");
BigDecimal b3=b1.subtract(b2);
double k = i - j;
System.out.println(i + "的整数部分是:" + b2.doubleValue());
System.out.println(i + "的小数部分是:" + b3.doubleValue());

}
}

这是由Double得toString机制影响了结果,用double进行减法等运算式部精确的,解决方法就是用BigDecimal,但是构造的时候用参数为String重载构造
铑枪--突廆孒 2009-10-11
  • 打赏
  • 举报
回复
因为浮点小数在计算机中本就代表一个近似值,不是一个精确的数。
如果你对这个要求高的话,你可以使用精确的浮点小数:java.math.BigDecimal,这个类可以用来做精确的小数运算,

看该类的API:http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/math/BigDecimal.html
amdgaming 2009-10-11
  • 打赏
  • 举报
回复
赞,学习。。
swandragon 2009-10-11
  • 打赏
  • 举报
回复

/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v,int scale){
if(scale < 0){
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static void main(String[] args) {
String str = JOptionPane.showInputDialog("请输入一个浮点数");
Double i = Double.parseDouble(str);

double j = Math.floor(i);
double k = i - j;
System.out.println(i + "的整数部分是:" + j);
System.out.println(i + "的小数部分是:" + round(k,1));
}

62,614

社区成员

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

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