Bootstrap

c++怎么保留小数和进制转换

1.保留小数

在 C++ 中,你可以使用 `std::fixed` 和 `std::setprecision` 来设置小数点后的精度并保留相应的位数。

下面是一个示例:

#include <iostream>
#include <iomanip>

int main() {
    double number = 3.14159265358979323846;
    
    std::cout << std::fixed << std::setprecision(6) << number << std::endl;
    
    return 0;
}

在上述示例中,我们定义了一个 double 类型的变量 `number`,其值为 π(π的近似值)。然后,使用 `std::fixed` 和 `std::setprecision(6)` 来设置小数点后的精度为6位,并输出到控制台。

输出结果将是 "3.141593",即保留小数点后6位的结果。

你可以将需要保留小数点后6位的变量替换为你自己的变量,并根据需要修改精度位数。

std::fixed 这个是干什么的?


std::fixed 是 C++ 中的一个 I/O 操纵符,用于设置浮点数的输出格式。它会将浮点数的小数部分输出为固定的小数位数(而不是使用科学计数法表示)。

默认情况下,C++ 的流对象在输出浮点数时会使用自适应的格式,当小数位数较多时,会采用科学计数法来表示。但是,如果你想要固定显示特定的小数位数,你可以使用 `std::fixed` 来进行控制。

在之前的示例中,我们使用 `std::fixed` 来设置输出格式,将浮点数的小数部分输出为固定的小数位数。

需要注意的是,std::fixed的作用范围是局部的,只会对紧随其后的浮点数输出起作用。如果想要恢复到默认的自适应格式,可以使用 `std::defaultfloat`。

使用 `std::fixed`时,还可以配合 `std::setprecision` 来指定小数的精度位数,例如 `std::setprecision(6)` 表示保留6位小数。


#include <iostream>
#include <iomanip>

int main() {
    double number = 3.14159265358979323846;
    
    std::cout << std::fixed << std::setprecision(6) << number << std::endl;
    
    return 0;
}

输出结果将是 "3.141593",即保留小数点后6位的结果。

2.进制转换

如果要将十进制数转换为其他进制(例如九进制、十一进制等),可以使用以下方法:


#include <iostream>
#include <string>

std::string decimalToBase(int num, int base) {
    if (num == 0) {
        return "0";
    }
    
    std::string result;
    
    while (num > 0) {
        int remainder = num % base;
        result.insert(result.begin(), '0' + remainder);
        num /= base;
    }
    
    return result;
}

int main() {
    int decimalNumber = 20;
    int base = 9;
    
    std::string convertedNumber = decimalToBase(decimalNumber, base);
    
    std::cout << convertedNumber << std::endl;  // 输出为 "22"(20的九进制表示)
    
    return 0;
}

在上述示例中,定义了一个名为 `decimalToBase` 的函数,它接受两个参数:`num` 表示要转换的十进制数,`base` 表示要转换的目标进制。该函数通过不断取余和除法运算来计算出每位的值,并将其插入到结果字符串中。最终,将结果字符串作为函数的返回值。

`main` 函数中,我们将要转换的十进制数设为 20,目标进制设为 9。然后,调用 `decimalToBase` 函数进行转换,并将结果输出到控制台。

你可以根据需要修改 `decimalNumber``base` 的值来进行不同的十进制到其他进制的转换。

;