当前位置: 首页 > 面试题库 >

Java中双精度除法时的奇怪行为

满言
2023-03-14
问题内容

当我使用双精度数在Java中将317除以219时,得到1。
例如:

double b = 317/219;
System.out.println(b);

输出为:1。

这是因为它是重复的小数吗?不得不使用BigDecimal代替,这很烦人。


问题答案:

试试这个

 double b = 317/219D;

java中编码数字的默认类型是int,因此使用现有的代码,java正在使用两个int数字,并且除法的结果也将是int,这将截断小数部分以得出最终结果1int然后将此结果从int 1转换为,double 1而没有编译器警告,因为它是 扩大的转换 (保证源类型“适合”目标类型的转换)。

通过将任意一个数字编码为double结尾D(您也可以使用d,但是我总是使用大写字母,因为L小写l看起来像a
1),除法的结果也将是double这样。



 类似资料:
  • 亲爱的SO朋友们! 我有一个奇怪的问题与MariaDB 5.5.60运行在linux上。 出于某种原因,我正在对差异列进行简单的操作,正如您所看到的,它是一个双倍的。 问题是: -917.3700000000001 当系统开始加减值时会发生这种情况。由于这些数字代表金钱,我们不能容忍任何随意的差别。 可能导致此问题的查询之一如下: 如您所见,该值正在更新为减去$xfer- 这甚至有点难以复制,因为

  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(

  • 问题内容: 好的。我一直在脑海里猛击了大约2个小时,现在想弄清楚为什么世界上告诉我0。或者与此相关的任何其他组合,它只是截断了小数,我只是不知道为什么。 问题答案: 364/365执行整数除法(截断小数点)。 尝试强制其执行浮点除法。 就像是: 由于其中一个操作数不是整数,因此也可以使用。

  • 对于实现精确 IEEE 754 算术的 C99 编译器,是否存在型的 、的值,使得 ? 编辑:所谓“实现精确的IEEE754算法”,我指的是一个正确地将FLT_EVAL_METHOD定义为0的编译器。 提供符合IEEE 754标准的浮点数的C编译器只能将单精度除法替换为常数,如果所述逆本身可以完全表示为。 实际上,这种情况只发生在2的幂上。因此,程序员Alex可能确信< code>f / 2.0f

  • 我有以下代码: 假设我现在将电脑的时区设置为太平洋时间(PDT为UTC-7),则打印 2012年6月29日星期五08:15:00太平洋标准时间 PDT不是比IST(印度标准时间)晚12.5小时吗?这个问题在任何其他时区都不会发生-我尝试了UTC、PKT、MMT等,而不是日期字符串中的IST。Java中有两个IST吗? 注意:实际代码中的日期字符串来自外部源,因此我不能使用GMT偏移量或任何其他时区

  • 我在做Maven项目。我用log4j做了一个日志。但它在给定的文件中显示了一些starnge日志。我试图理解,为什么会出现这种奇怪的日志,但我不明白。请帮助我,为什么这些不需要的行会进入日志文件。 请帮我把这个拿开。 log.properties 我通过阅读这个链接创建了这个文件。 代码是 日志txt-(log.txt的一些起始行)