java 解惑.doc

preview
5星 · 超过95%的资源 需积分: 0 31 下载量 87 浏览量 更新于2007-08-04 收藏 830KB DOC 举报
Java语言中的取余操作符 `%` 在处理负数时的行为可能会引起误解。在谜题1中,`isOdd` 方法原本设计用来检测一个整数是否为奇数,但因为Java的取余操作符 `%` 的特性,它在负数上无法正确工作。当 `i` 是负奇数时,`i % 2` 实际上会得到 `-1` 而非 `1`,导致方法错误地返回 `false`。为了解决这个问题,我们可以修改比较条件,检查 `i % 2` 是否不等于 `0`,如下所示: ```java public static boolean isOdd(int i){ return i % 2 != 0; } ``` 或者,为了提高性能,可以使用位操作符 `AND (&)`: ```java public static boolean isOdd(int i){ return (i & 1) != 0; } ``` 位操作符在某些情况下能提供更快的计算速度,因为它直接在二进制级别进行运算。 谜题2涉及浮点数的精度问题。在Java中,`double` 类型用于表示浮点数,但并非所有十进制小数都能精确地表示为二进制浮点数。当尝试计算 `2.00 - 1.10` 时,`1.1` 实际上被存储为最接近它的二进制浮点数,导致结果略小于 `0.9`。因此,`System.out.println(2.00 - 1.10)` 输出的不是期望的 `0.90`,而是 `0.8999999999999999`。这是因为浮点运算的不精确性,而不是打印格式的问题。 解决浮点数精度问题的一种方法是使用固定精度的数值类型,如 Java 提供的 `BigDecimal` 类。它可以用来表示任意精度的十进制数,避免浮点运算带来的误差。例如: ```java import java.math.BigDecimal; public class Change { public static void main(String[] args) { BigDecimal amountPaid = new BigDecimal("2.00"); BigDecimal itemCost = new BigDecimal("1.10"); BigDecimal change = amountPaid.subtract(itemCost); System.out.println(change); } } ``` 这样,即使在计算找零时,也能确保得到精确的结果 `0.90`。在涉及财务计算,特别是涉及到货币的时候,使用 `BigDecimal` 类是明智的选择,因为它可以提供所需的精度和控制。在编写Java代码时,理解取余操作符 `%` 和浮点数表示的内在机制是非常重要的,这样才能确保代码在各种情况下都能正确运行。
xdark
  • 粉丝: 8
  • 资源: 6
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜