黑马程序员技术交流社区

标题: 将double转换成int输出,为什么输出的数尾部还有小数点? [打印本页]

作者: onlyonewf    时间: 2012-6-10 10:46
标题: 将double转换成int输出,为什么输出的数尾部还有小数点?
Java code

    double k = 12345; System.out.println(k); //输出: 12345.0


我为了不让输出的数最后加.0,下面我先将它转换成整型,然后输出,可是结果:



Java code

    double m = 12345; int n = (int)m; System.out.println(m==n ? n : m); //为什么输出的还是12345.0


作者: 张洁    时间: 2012-6-10 10:58
感觉你最后的打印有点画蛇添足额- -
double m = 12345;
int n = (int)m;
你本意是转过类型然后打印,那直接这样就可以啦:
System.out.println(n);
结果:
12345

用三元运算符的话:
m==n?n:m
这里需要n和m是同类型的。
但是你的n是int而m是double不同,且double级别高于int
因而java会将低级的int自动向高级的double转换,
之后再对比进行三元运算,因而结果还是double型的
12345.0

如果你非要用三元运算符的话,建议这么改:
System.out.println((int)m == n ? n : (int)m);
我在机子上测试过啦~结果就是你想要的:
12345
作者: 田建    时间: 2012-6-10 13:34
lz改变后的代码:double m = 12345; int n = (int)m; System.out.println(m==n ? n : m); //为什么输出的还是12345.0
可能lz还是不太清楚三元运算符,首先对m==n做判断,结果是真,返回n;结果是假,返回m。
因为结果为假,自然输出m,所以打印的还是类型转换前的double m;


作者: 吴小东    时间: 2012-6-10 13:39
顶楼上一个 三元运算结果为 false  返回 m  并没有达到你想输出 n 的结果
作者: 黄昆    时间: 2012-6-10 15:36
你这个是直接输出的double数据类型当然要带小数点了,如果你想强转就这样写
System.out.println((int)k);
作者: 胡卿    时间: 2012-6-10 23:16
最后的输出出现了问题
System.out.println(m==n?n:m);
运算前要先进行类型转换,由低级转向高级,故n就由int型转换为double型,输出结果自然为12345.0

建议改成
  1. class  Code
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 double m = 12345;
  6.                 int n = (int)m;
  7.                 System.out.println((int)(m==n ? n : m));
  8.                
  9.         }
  10. }
复制代码
强制转换为int型,再做三元运算,就没问题了,结果就为12345





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2