There is a no exact representation of 0.1 as a `float`

or `double`

. Because of this representation error the results are slightly different from what you expected.

A couple of approaches you can use:

- When using the
`double`

type, only display as many digits as you need. When checking for equality allow for a small tolerance either way. - Alternatively use a type that allows you to store the numbers you are trying to represent exactly, for example
`BigDecimal`

can represent 0.1 exactly.

Example code for `BigDecimal`

:

```
BigDecimal step = new BigDecimal("0.1");
for (BigDecimal value = BigDecimal.ZERO;
value.compareTo(BigDecimal.ONE) < 0;
value = value.add(step)) {
System.out.println(value);
}
```

See it online: ideone