Pfeffer
Pfeffer
2017-09-28 19:24
采纳率: 53%
浏览 955
已采纳

一个基础问题,搞不清楚

图片说明

为什么我输出的是浮点数,但是1/1000 得到的却是0.0

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

9条回答 默认 最新

  • yanglong_blog_
    longger_yang 2017-09-29 02:20
    已采纳

    Java中如果没有小数点的数字,如1, 2, 3...等,默认是 int 类型, "/" 运算符有一个特性,如果除数和被除数都为整形,那么最后将结果向下取整。
    如果想要输出正确的结果,应该将 1/1000中的某个数换成double类型,如写成 1.0 / 1000,这样jvm虚拟机在处理的时候,才不会自动将结果向下取整,
    因为 1.0在java中默认为double类型。

    点赞 评论
  • AAAAABBBBBYYYYY
    Abean_Y 2017-09-29 00:47

    1是整形,除法后还是整形,你用1.0

    点赞 评论
  • chenbaige
    legendCoder 2017-09-29 00:48

    1/1000会强制转换成int,因为值小于1,所以直接舍弃小数点后面的,取0.

    点赞 评论
  • qq_38523913
    是镜花水月 2017-09-29 00:59

    double i = 1;
    double a = i/1000;
    System.out.println(a);
    你应该这样写,像你那样double width = 1/1000;那么1是int型的,1/1000还是int型的,计算完了1/1000才会转换成double型

    点赞 评论
  • dq501940131
    浮光月影 2017-09-29 01:21

    计算精度优先转换精度,右边算式;
    参数的最高级为整型,所以计算精度为整型,故计算结果为0;
    左边变量为double,int精度不够,自动完成int到double的转换,最终为0.0

    点赞 评论
  • qq_26433213
    花下泥 2017-09-29 01:22

    都是int类型,结果也是int类型

    点赞 评论
  • CFH1021
    一杯盐水 2017-09-29 02:47

    int型变量 / int型变量 其值仍为int型;需要将除数转换为高精度的类型

    点赞 评论
  • lyfkm
    lyfkm 2017-09-29 03:11

    double width = 1/3d;
    这才是对double型数值的计算,如 long a = 10L 一样
    原因楼上的几位说的很清楚

    点赞 评论
  • start_orientation
    start_orientation 2017-09-29 15:07

    只需要记住一点就好了,小类型和大类型一起做运算,运算一定会返回大类型那一边的。如int和double做运算,运算结果一定会是double类型的。

    点赞 评论

相关推荐