You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何对浮点数取整且保留浮点数类型(避免转为int)?

解决圆形面积的自定义取整需求

嘿,我来帮你搞定这个问题!你想要的是小数部分大于0.5时向上取整为带.0的浮点数,小于0.5时向下取整为带.0的浮点数,而且不想转成int类型对吧?其实有两种简单的方法可以实现,刚好满足你既要用Math.floor()又要Math.ceil()的需求,或者用更简洁的方式替代:

方法1:手动判断小数部分,结合floor和ceil

这种方法完全按照你的需求逻辑来,先拆分出结果的整数部分和小数部分,再判断该用floor还是ceil

private float radius;
private double result;

public void show(float x) {
    this.radius = x;
    this.result = Math.pow(x, 2) * Math.PI;
    
    // 自定义取整逻辑
    double roundedResult;
    double integerPart = Math.floor(result);
    double decimalPart = result - integerPart;
    
    if (decimalPart > 0.5) {
        // 小数部分大于0.5,向上取整
        roundedResult = Math.ceil(result);
    } else {
        // 小数部分小于0.5,向下取整
        roundedResult = Math.floor(result);
    }
    
    System.out.println("原始结果: " + result);
    System.out.println("取整后结果: " + roundedResult);
}

细节说明:

  • 这里如果遇到小数部分等于0.5的情况(比如4.5),会执行Math.floor()得到4.0;如果你需要等于0.5时向上取整,只需要把判断条件改成decimalPart >= 0.5即可。

方法2:用Math.round()+强制类型转换(更简洁)

你之前用Math.round()会得到int类型,但其实只要把它的返回值强制转成double,就能得到带.0的浮点数了,效果完全符合你的需求:

  • Math.round(4.3)返回4,转成double就是4.0
  • Math.round(4.6)返回5,转成double就是5.0

修改后的代码更简洁:

private float radius;
private double result;

public void show(float x) {
    this.radius = x;
    this.result = Math.pow(x, 2) * Math.PI;
    
    // 一行搞定取整,保持double类型
    double roundedResult = (double) Math.round(result);
    
    System.out.println("原始结果: " + result);
    System.out.println("取整后结果: " + roundedResult);
}

两种方法都能满足你的需求,选哪个看你更偏向直观逻辑还是简洁写法~

内容的提问来源于stack exchange,提问作者mhamad arsalan

火山引擎 最新活动