• C++
  • C++保留几位小数 去掉保留几位小数教程

  • @ 2025-8-18 11:43:53

在C++中,我们可以使用输入输出流控制符来保留或去掉小数位数。下面详细介绍两种常用方法:

1. 使用setprecision控制小数位数

setprecision<iomanip>头文件中的函数,可以设置小数的精度。

#include <iostream>
#include <iomanip> // 包含setprecision等函数

using namespace std;

int main() {
    double num = 3.1415926535;
    
    // 保留2位小数
    cout << "保留2位小数: " << fixed << setprecision(2) << num << endl;
    
    // 不保留小数(取整数部分)
    cout << "不保留小数: " << fixed << setprecision(0) << num << endl;
    
    // 恢复默认输出格式
    cout << "默认格式: " << setprecision(6) << num << endl;
    
    return 0;
}

输出结果:

保留2位小数: 3.14
不保留小数: 3
默认格式: 3.14159

2. 使用类型转换去掉小数(强制转换)

如果需要完全去掉小数部分(不是四舍五入显示),可以使用强制类型转换:

#include <iostream>

using namespace std;

int main() {
    double num = 3.99999;
    
    // 强制转换为int,直接截断小数部分
    int intNum = (int)num;
    cout << "截断小数后: " << intNum << endl; // 输出3
    
    return 0;
}

关键点说明:

  1. fixedsetprecision配合使用时,setprecision(n)表示保留n位小数
  2. 不使用fixed时,setprecision(n)表示保留n位有效数字
  3. 强制类型转换会直接截断小数部分,而不是四舍五入
  4. 记得包含<iomanip>头文件才能使用setprecision

根据实际需求选择合适的方法,如果需要四舍五入保留小数就用setprecision,如果需要直接去掉小数部分就用强制类型转换。

1 条评论

  • @ 2025-8-18 11:45:20

    在C++中,"去掉保留的小数位数"通常有两种理解:一是将已经设置的小数位数格式恢复为默认状态,二是完全去除小数部分(只保留整数)。下面分别介绍这两种情况的实现方法:

    方法1:恢复默认输出格式(取消固定小数位数)

    当使用 fixedsetprecision(n) 设置了固定小数位数后,可以通过以下方式恢复默认输出格式:

    #include <iostream>
    #include <iomanip> // 需包含此头文件
    
    using namespace std;
    
    int main() {
        double num = 123.456789;
        
        // 先设置保留2位小数
        cout << "保留2位小数: " << fixed << setprecision(2) << num << endl;
        
        // 取消固定小数位数,恢复默认格式(默认显示6位有效数字)
        cout << "恢复默认格式: " << setprecision(6) << num << endl;
        
        // 也可以用默认的cout输出(不加任何控制符)
        cout << "直接输出(默认): " << num << endl;
        
        return 0;
    }
    

    输出结果:

    保留2位小数: 123.46
    恢复默认格式: 123.457
    直接输出(默认): 123.457
    

    说明

    • fixed 是"固定小数位数"的开关,一旦设置后会持续生效
    • 取消时无需专门关闭 fixed,只需再次使用 setprecision(n) 且不配合 fixed,此时 n 表示"有效数字位数"(默认6位)

    方法2:完全去除小数部分(只保留整数)

    如果需要将数值本身的小数部分去掉(不是单纯修改显示格式),有两种常用方式:

    方式A:强制类型转换(直接截断小数)

    将浮点数强制转换为整数类型(如 int),会直接截断小数部分(不四舍五入):

    #include <iostream>
    
    using namespace std;
    
    int main() {
        double num1 = 5.999;
        double num2 = 3.1415;
        
        // 强制转换为int,直接去掉小数
        int res1 = (int)num1; // 结果为5(不是6)
        int res2 = (int)num2; // 结果为3
        
        cout << "去掉小数后(num1): " << res1 << endl;
        cout << "去掉小数后(num2): " << res2 << endl;
        
        return 0;
    }
    

    输出结果:

    去掉小数后(num1): 5
    去掉小数后(num2): 3
    

    方式B:使用floorceil函数(数学处理)

    如果需要按数学规则处理(向下取整或向上取整),可以使用 <cmath> 头文件中的函数:

    #include <iostream>
    #include <cmath> // 需包含此头文件
    
    using namespace std;
    
    int main() {
        double num = 5.999;
        
        // floor:向下取整(去掉小数,结果不大于原数)
        int floor_res = (int)floor(num); // 结果为5
        
        // ceil:向上取整(去掉小数,结果不小于原数)
        int ceil_res = (int)ceil(num);   // 结果为6
        
        cout << "floor向下取整: " << floor_res << endl;
        cout << "ceil向上取整: " << ceil_res << endl;
        
        return 0;
    }
    

    输出结果:

    floor向下取整: 5
    ceil向上取整: 6
    

    总结

    • 若要恢复输出格式(取消固定小数位数):使用 setprecision(6)(默认6位有效数字)
    • 若要完全去除数值的小数部分
      • 直接截断用 (int)浮点数
      • 数学取整用 floor()ceil()(需包含 <cmath>

    根据实际需求选择合适的方法即可。

    • 1