我知道这看起来是一个非常愚蠢的问题,但我就是不明白为什么这个问题行不通。这一点:
System.out.println(5 % .10);它又回来了:
0.09999999999999973我真的不知道。我只是在学习Java,而且我对C#很在行,所以我试着用C#。C#似乎也返回了同样的东西。
发布于 2011-09-27 08:42:11
正如其他人解释的那样,这是由于浮点精度造成的不准确。
对于涉及小数的精确算术,您应该使用BigDecimal,在本例中为remainder method。
BigDecimal number = new BigDecimal(5);
BigDecimal divisor = new BigDecimal("0.1");
BigDecimal result = number.remainder(divisor);
System.out.println(result); // 0发布于 2011-09-27 08:35:47
这是由于浮点精度所致。0.10不能精确地用二进制表示。因此,结果并不完全是0.10,因此没有向下修改为0。
这将适用于0.25,因为0.25 可以用精确地用二进制表示。
编辑:
通常,任何可以表示为分母为2次方的分数的数字都可以精确地表示为IEEE浮点数。(前提是没有溢出/下溢)
发布于 2011-09-27 08:35:28
你在做浮点运算。0.1没有与浮点数相同的精确表示。
https://stackoverflow.com/questions/7562949
复制相似问题