A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

5 个回复

正序浏览
最后的输出出现了问题
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
回复 使用道具 举报
你这个是直接输出的double数据类型当然要带小数点了,如果你想强转就这样写
System.out.println((int)k);
回复 使用道具 举报
顶楼上一个 三元运算结果为 false  返回 m  并没有达到你想输出 n 的结果
回复 使用道具 举报
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;

回复 使用道具 举报
感觉你最后的打印有点画蛇添足额- -
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

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马