You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断double类型数字小数点后全为0并转换为int类型

判断double类型小数部分是否全为0并转换为int的实现方法

核心逻辑

判断double值的小数部分是否为0,核心是对比原始值和取整后的值是否相等,转换前必须先校验数值是否在int类型的取值范围内,避免溢出报错。

如果是浮点运算得到的double值,可能存在精度误差,建议设置极小的误差阈值做判断,比如abs(原始值 - 取整后的值) < 1e-9,避免精度问题导致判断错误。

常用语言实现示例

Python

Python的float类型内置了is_integer()方法可以直接判断小数部分是否为0:

def convert_double_to_int(num):
    if num.is_integer():
        return int(num)
    # 不满足条件返回原始值
    return num

# 测试用例
print(convert_double_to_int(13.0))    # 输出 13
print(convert_double_to_int(144.0))   # 输出 144
print(convert_double_to_int(12.34))   # 输出 12.34

Java

public class DoubleConvertUtil {
    public static Number convert(double num) {
        // 先校验是否在int的取值范围内,再判断小数部分是否为0
        if (num >= Integer.MIN_VALUE && num <= Integer.MAX_VALUE && num == (long) num) {
            return (int) num;
        }
        return num;
    }

    public static void main(String[] args) {
        System.out.println(convert(13.0));    // 输出 13
        System.out.println(convert(144.0));   // 输出 144
        System.out.println(convert(12.34));   // 输出 12.34
    }
}

C++

需要引入<cmath>的取整方法做判断:

#include <iostream>
#include <cmath>
#include <climits>
#include <variant>

std::variant<int, double> convert_double_to_int(double num) {
    // 增加误差阈值适配浮点运算的精度问题
    if (num >= INT_MIN && num <= INT_MAX && fabs(num - round(num)) < 1e-9) {
        return static_cast<int>(num);
    }
    return num;
}

int main() {
    auto print_val = [](auto&& val) { std::cout << val << std::endl; };
    std::visit(print_val, convert_double_to_int(13.0));    // 输出 13
    std::visit(print_val, convert_double_to_int(144.0));   // 输出 144
    std::visit(print_val, convert_double_to_int(12.34));   // 输出 12.34
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:48:01