好的。我一直在脑海里猛击了大约2个小时,现在想弄清楚为什么世界double answer = 364/365;
上告诉我answer
0。或者与此相关的任何其他组合double
,它只是截断了小数,我只是不知道为什么。
364/365执行整数除法(截断小数点)。
尝试double answer = 364.0/365;
强制其执行浮点除法。
就像是:
double days_in_year = 365;
double answer = 364/days_in_year;
由于其中一个操作数不是整数,因此也可以使用。
问题内容: 当我使用双精度数在Java中将317除以219时,得到1。 例如: 输出为:1。 这是因为它是重复的小数吗?不得不使用BigDecimal代替,这很烦人。 问题答案: 试试这个 java中编码数字的默认类型是,因此使用现有的代码,java正在使用两个数字,并且除法的结果也将是,这将截断小数部分以得出最终结果。然后将此结果从转换为,而没有编译器警告,因为它是 扩大的转换 (保证源类型“适
问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(
对于实现精确 IEEE 754 算术的 C99 编译器,是否存在型的 、的值,使得 ? 编辑:所谓“实现精确的IEEE754算法”,我指的是一个正确地将FLT_EVAL_METHOD定义为0的编译器。 提供符合IEEE 754标准的浮点数的C编译器只能将单精度除法替换为常数,如果所述逆本身可以完全表示为。 实际上,这种情况只发生在2的幂上。因此,程序员Alex可能确信< code>f / 2.0f
我正在尝试创建一个程序,它从用户那里获取两倍的值,并将它们存储在数组中,然后再对它们进行分割和四舍五入。然而,我在尝试创建双数组时不断收到错误消息。 我在声明数组时得到的错误是: 不兼容类型:从双精度到整数的有损转换
为什么此代码引发此异常: 线程“main”java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Double 而这个,运行良好: 两者都是尝试将整数转换为双精度,对吗?
问题内容: 对于此代码块: 的值d就是0.0。它可以通过强制转换来工作: 但是还有另一种方法来获得正确的结果吗?我不喜欢强制转换原语,谁知道会发生什么。 问题答案: 这样可以避免强制转换。但是你会发现强制转换的定义很明确。你不必猜测,只需检查JLS即可。从int到double是一个不断扩大的转换。从第5.1.2节开始: