【C++】std::fixed设置输出流中浮点数 (保留固定小数位)

2024-04-02 20:28

本文主要是介绍【C++】std::fixed设置输出流中浮点数 (保留固定小数位),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

使用说明(略读)

举例说明(细读)


使用说明(略读)

std::fixed 常搭配 std::setprecision(3) 使用

std::fixed 和 std::setprecision(n) 在一起使用时,通常是为了精确控制输出浮点数的小数部分的显示格式。

  • std::fixed 指定输出的是固定小数点格式,这意味着无论数值大小,都会按照小数点后的位数来显示,不会因为数值太大或太小而采用科学计数法表示

  • std::setprecision(n) 设置输出的小数部分精度为 n 位。它定义了在输出流中显示的最少有效数字数,包括小数点后的数字。

因此,当你既想固定小数点,并且希望小数点后保留特定数量的数字时,通常会同时使用这两个操纵符。例如:

std::cout << std::fixed << std::setprecision(3) << some_float_value;


std::fixed是C++标准库iomanip中的一个操纵符,用于设置输出流(如cout或stringstream ss)中浮点数的显示方式。当在输出流中使用了std::fixed后,浮点数会被格式化为固定小数点模式。这样可以确保输出的浮点数具有确定且固定的精度。

举例说明(细读)

“如果不使用 std::fixed,即使设置了精度,编译器也可能根据数值大小自动选择最佳的浮点数表示方式,不一定是固定的小数位数 ” 我们来举个例子。

例子1:仅使用 std::setprecision(n)

#include <iostream>
#include <iomanip>int main() {double large_number = 123456789.123456;std::cout << std::setprecision(3) << large_number << std::endl;double small_number = 0.0000012345;std::cout << std::setprecision(3) << small_number << std::endl;
}

在这段代码中,虽然我们指定了std::setprecision(3),但没有使用std::fixed,编译器可能对每个数值采用不同的输出策略:

  • 对于大数 large_number,由于数值较大,输出可能会自动调整为类似 1.23e+08 这样的科学计数法格式,尽管小数部分仍然保留了3位精度。
  • 对于小数 small_number,可能会得到类似于 1.235e-06 的科学计数法表示,同样保持了小数点后3位精度,但并非固定小数点形式。

例子2:同时使用 std::fixed 和 std::setprecision(n)

#include <iostream>
#include <iomanip>int main() {double large_number = 123456789.123456;std::cout << std::fixed << std::setprecision(3) << large_number << std::endl;double small_number = 0.0000012345;std::cout << std::fixed << std::setprecision(3) << small_number << std::endl;
}

在此情况下,由于添加了std::fixed,所有数值都将严格按照小数点后保留3位的格式输出:

  • large_number 将被显示为 123456789.123,没有采用科学计数法。
  • small_number 将被显示为 0.000,同样精确到小数点后3位,即便实际结果显示为0,也会保持固定的小数点形式。

总结来说,std::fixed 确保了浮点数始终以固定的小数位数格式显示,而不受其绝对值大小的影响。

这篇关于【C++】std::fixed设置输出流中浮点数 (保留固定小数位)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870971

相关文章

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方