合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
### [截断和舍入](https://lingcoder.gitee.io/onjava8/#/book/04-Operators?id=%e6%88%aa%e6%96%ad%e5%92%8c%e8%88%8d%e5%85%a5) 在执行“向下转换”时,必须注意数据的截断和舍入问题。若从浮点值转换为整型值,Java 会做什么呢?例如:浮点数 29.7 被转换为整型值,结果会是 29 还是 30 呢?下面是代码示例: ~~~ // operators/CastingNumbers.java // 尝试转换 float 和 double 型数据为整型数据 public class CastingNumbers { public static void main(String[] args) { double above = 0.7, below = 0.4; float fabove = 0.7f, fbelow = 0.4f; System.out.println("(int)above: " + (int)above); System.out.println("(int)below: " + (int)below); System.out.println("(int)fabove: " + (int)fabove); System.out.println("(int)fbelow: " + (int)fbelow); } } ~~~ 输出结果: ~~~ (int)above: 0 (int)below: 0 (int)fabove: 0 (int)fbelow: 0 ~~~ 因此,答案是,从**float**和**double**转换为整数值时,小数位将被截断。若你想对结果进行四舍五入,可以使用`java.lang.Math`的 `round()`方法: ~~~ // operators/RoundingNumbers.java // float 和 double 类型数据的四舍五入 public class RoundingNumbers { public static void main(String[] args) { double above = 0.7, below = 0.4; float fabove = 0.7f, fbelow = 0.4f; System.out.println( "Math.round(above): " + Math.round(above)); System.out.println( "Math.round(below): " + Math.round(below)); System.out.println( "Math.round(fabove): " + Math.round(fabove)); System.out.println( "Math.round(fbelow): " + Math.round(fbelow)); } } ~~~ 输出结果: ~~~ Math.round(above): 1 Math.round(below): 0 Math.round(fabove): 1 Math.round(fbelow): 0 ~~~ 因为`round()`方法是`java.lang`的一部分,所以我们无需通过`import`就可以使用。