为了账号安全,请及时绑定邮箱和手机立即绑定

为什么双倍宽度= 50/110000; 输出是0.000000000000000?

为什么双倍宽度= 50/110000; 输出是0.000000000000000?

汪汪一只猫 2019-08-14 15:56:41
为什么双倍宽度= 50/110000; 输出是0.000000000000000?这是我的代码:double width = 50/110000;System.out.println("width ori is "+width );输出是: 0.00000000000怎么了 ?预期的产出必须是4.5454545454545455E-4任何人都可以向我解释原因吗?
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

因为你要划分两个整数,所以它只取整数部分(整数除法)。


在计算机程序中划分整数需要特别小心。一些编程语言,处理整数除法(即通过给出整数商作为答案)。所以答案是整数。


例子 :


In real life                  In Java


4/3  = 1.33333                4/3  = 1

25/12 = 2.083333              25/12 = 2

9/2 = 4.5                     9/2 = 4

50/110000 = 0.000454545       50/110000 = 0

您可以使用其中一个(或两个但实际上没用)double来避免这种情况:


double width = (double)50/110000;

double width = 50d/110000;

double width = 50.0/110000;


查看完整回答
反对 回复 2019-08-14
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

int/int返回的结果你integer

所以小数部分被截断,导致你得到一个整数

你需要施放:

double width = (double)50/110000;

正如@Josh M指出的那样,您也可以尝试:

double width = 50d / 110000d;


查看完整回答
反对 回复 2019-08-14
?
烙印99

TA贡献1829条经验 获得超13个赞

解释发生了什么:

在Java中,默认的数字类型是int,所以当你编写时50/110000,它们都被考虑了int,尽管你定义了结果double
int发生除法时,结果将是0,因为它们都是ints,那么double将保持这个值,这将表示为double,所以你得到了0.000000

可能的解决方案:

  • 用以下代码编码这些数字d50d/110000d

  • 明确铸造一侧(其他的将被隐式转换)(double)50/110000

  • 50.0/110000

请参阅第5章转换和促销,它真的会对您有所帮助。


查看完整回答
反对 回复 2019-08-14
  • 3 回答
  • 0 关注
  • 526 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信