为什么说float和double是不精确的

众所周知,在 Java 中,使用 float 和 double 分别用来表示单精度浮点数和双精度浮点数。所谓精度不同,可以简单的理解为保留有效位数不同。采用保留有效位数的方式近似的表示小数,但是为什么需要以保留有效位数的方式来表示浮点数呢?难倒就不能精确的表示吗?答案是:float和double不能