File: NarrowCalculation.md

package info (click to toggle)
error-prone-java 2.18.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 23,204 kB
  • sloc: java: 222,992; xml: 1,319; sh: 25; makefile: 7
file content (40 lines) | stat: -rw-r--r-- 1,077 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Integer division is suspicious when the target type of the expression is a
float. For example:

```java
private static final double ONE_HALF = 1 / 2; // Actually 0.
```

If you specifically want the integer result, consider pulling out variable to
make it clear what's happening. For example, instead of:

```java
// Deduct 10% from the grade for every week the assignment is late:
float adjustedGrade = grade - (days / 7) * .1;
```

Prefer:

```java
// Deduct 10% from the grade for every week the assignment is late:
int fullWeeks = days / 7;
float adjustedGrade = grade - fullWeeks * .1;
```

Similarly, multiplication of two `int` values which are then cast to a `long` is
problematic, as the `int` multiplication could overflow. It's better to perform
the multiplication using `long` arithmetic.

```java
long secondsToNanos(int seconds) {
  return seconds * 1_000_000_000; // Oops; starts overflowing around 2.15 seconds.
}
```

Instead, prefer:

```java
long secondsToNanos(int seconds) {
  return seconds * 1_000_000_000L; // Or ((long) seconds) * 1_000_000_000.
}
```