การปัดเศษของตัวเลข

C++:
การปัดเศษของตัวเลข

วิธีการ:

C++ เสนอวิธีการปัดเศษตัวเลขหลายวิธี เช่น floor(), ceil(), และ round():

#include <iostream>
#include <cmath> // สำหรับฟังก์ชันการปัดเศษ

int main() {
    double num = 3.14;

    std::cout << "floor: " << std::floor(num) << "\n"; // ผลลัพธ์: floor: 3
    std::cout << "ceil: " << std::ceil(num) << "\n";   // ผลลัพธ์: ceil: 4
    std::cout << "round: " << std::round(num) << "\n"; // ผลลัพธ์: round: 3

    // สำหรับความแม่นยำที่ตายตัว เช่น การปัดเศษไปเป็นสองทศนิยม:
    double precise_num = 3.146;
    double multiplier = 100.0;
    double rounded = std::round(precise_num * multiplier) / multiplier;

    std::cout << "rounded to two decimals: " << rounded << "\n"; // ผลลัพธ์: rounded to two decimals: 3.15

    return 0;
}

ลงลึก

ก่อน C++11, การปัดเศษขึ้นอาศัยเทคนิคแบบดั้งเดิมหรือไลบรารี่ที่ไม่เป็นมาตรฐาน ในปัจจุบัน, <cmath> ให้วิธีการที่มั่นคง floor() ปัดลง, ceil() ปัดขึ้น, ขณะที่ round() ไปที่จำนวนเต็มที่ใกล้ที่สุด, แม้แต่การจัดการกับกรณีการตัดสินใจ (กรณี 0.5) โดยปัดไปที่จำนวนคู่

การเข้าใจพฤติกรรมของฟังก์ชันเหล่านี้เป็นสิ่งสำคัญ เช่น ตัวเลขลบอาจทำให้คุณตกใจ (std::round(-2.5) ให้ผลลัพธ์ -2.0)

มีทางเลือกอื่นไหม? การแปลงเป็น int หลังจากที่เพิ่ม 0.5 สำหรับตัวเลขบวกเป็นเทคนิคแบบคลาสสิก แต่ผิดพลาดกับตัวเลขลบและไม่มีความเป็นกลางทางประเภท ไลบรารีเช่น Boost สามารถเสนอวิธีการที่มีความละเอียดอ่อนมากขึ้น ขณะที่ส่วนขยายภาษาหรือ intrinsic ของตัวแปลสามารถปรับให้เหมาะสมกับฮาร์ดแวร์เฉพาะได้

ดูเพิ่มเติม