第十二章--- fixed 和 setprecision 函数、round 函数、进制转换及底层逻辑
1. 保留几位小数
在C++中,如果你想要控制输出的小数点后的位数,可以使用<iomanip>头文件提供的fixed和setprecision函数。这里的fixed用于设置浮点数的输出格式为定点表示法,而setprecision(n)则用来指定小数点后保留的位数。具体用法如下:
#include <iostream>
#include <iomanip> // 引入iomanip头文件int main() {double n = 123.45678;std::cout << std::fixed << std::setprecision(2) << n << "\n"; // 保留2位小数return 0;
}
在这个例子中,n变量的值是123.45678,但是通过std::fixed << std::setprecision(2),我们告诉编译器我们希望输出的小数点后只保留两位,因此输出结果会是123.46(注意这里进行了四舍五入)。
2. 调用中的函数round四舍五入
当你需要对一个浮点数进行四舍五入操作时,可以使用<cmath>头文件中的round函数。这个函数接收一个浮点数作为参数,并返回最接近该数的整数值。如果该数的小数部分大于等于0.5,则向上取整;否则向下取整。例如:
#include <iostream>
#include <cmath> // 引入cmath头文件int main() {double a = 14.7;a = round(a); // 对a进行四舍五入std::cout << a << "\n"; // 输出15return 0;
}
这段代码首先定义了一个双精度浮点数a,然后使用round(a)对其进行四舍五入处理,最后输出结果为15。
3. 既保留几位小数又实现四舍五入
有时候,我们不仅需要对数字进行四舍五入,还希望保留特定的小数位数。这时,可以通过先将数字乘以10的幂次方,再进行四舍五入,最后除以相同的10的幂次方来达到目的。例如,要保留两位小数并四舍五入,可以这样做:
#include <iostream>
#include <cmath> // 引入cmath头文件int main() {double a = 14.348;a = round(a * 100) / 100; // 先乘以100,四舍五入后再除以100std::cout << a << "\n"; // 输出14.35return 0;
}
这里的关键步骤是先将a乘以100(因为我们要保留两位小数),这样原本的小数部分就被移动到了整数部分。接着使用round函数进行四舍五入,然后再除以100恢复原来的比例。最终输出的结果就是四舍五入并且保留了两位小数的14.35。
4. 进制相互转换
1. 二进制、八进制、十进制、十六进制转换:
#include<iostream>
#include <bitset> //转换二进制需要添加
using namespace std;
int main()
{cout << "8进制:" << oct << 35 <<"\n";cout << "10进制" << dec << 35 <<"\n";cout << "16进制:" <<hex << 35 << "\n";cout << "2进制: " << bitset<6>(35) <<"\n"; //保留6位输出(根据二进制而定)return 0;
}
这段C++代码展示了如何将一个整数(在这个例子中是35)转换成不同的进制表示形式:八进制、十进制、十六进制以及二进制。下面是对每部分的详细解释:
十进制(Decimal)
十进制是我们最常用的数字系统,它使用10个符号(0-9)。在上面的代码中,35 是一个十进制数。当直接输出 35 时,我们看到的是它的十进制形式。
八进制(Octal)
八进制使用8个符号(0-7)。在C++中,可以通过设置流的基数为八进制来输出一个数的八进制形式。这通过使用 std::oct 完成。例如,在代码中 cout << "8进制:" << oct << 35 <<"\n"; 输出 35 的八进制形式,即 43。
十六进制(Hexadecimal)
十六进制使用16个符号(0-9 和 A-F)。A代表10,B代表11,以此类推直到F代表15。在C++中,可以使用 std::hex 设置流的基数为十六进制。代码中的 cout << "16进制:" << hex << 35 << "\n"; 将输出 35 的十六进制形式,即 23。
二进制(Binary)
二进制只使用两个符号(0和1)。C++标准库并没有直接提供将数字转换为二进制字符串的功能,但可以使用 <bitset> 头文件提供的 std::bitset 类来实现这一功能。bitset 可以将一个整数转换为其二进制表示,并允许指定输出的位数。在示例代码中,cout << "2进制: " << bitset<6>(35) <<"\n"; 使用了 bitset<6>(35) 将 35 转换为二进制形式,并确保输出至少6位(不足则左补0),因此输出为 100011。
总结
- 十进制:直接输出整数,如
35。 - 八进制:使用
std::oct,输出43。 - 十六进制:使用
std::hex,输出23。 - 二进制:使用
std::bitset,输出100011。
这段代码很好地展示了如何在C++中进行不同进制之间的转换。
2. 手动进制转换
手动进行进制之间的转换,以便更好地理解这些转换的过程。
#include <iostream>
#include <bitset>
#include <iomanip> // 用于设置十六进制输出格式using namespace std;// 函数声明
string decimalToBinary(int n);
string decimalToOctal(int n);
string decimalToHex(int n);int main() {int number;cout << "请输入一个整数: ";cin >> number;// 输出不同进制的表示cout << "十进制: " << dec << number << "\n";cout << "八进制: " << oct << number << "\n";cout << "十六进制: " << hex << uppercase << number << "\n"; // uppercase 使十六进制字母大写cout << "二进制: " << bitset<32>(number) << "\n"; // 输出32位二进制数// 手动转换cout << "手动转换 - 二进制: " << decimalToBinary(number) << "\n";cout << "手动转换 - 八进制: " << decimalToOctal(number) << "\n";cout << "手动转换 - 十六进制: " << decimalToHex(number) << "\n";return 0;
}// 将十进制转换为二进制
string decimalToBinary(int n) {string binary = "";while (n > 0) {binary = to_string(n % 2) + binary;n /= 2;}return binary.empty() ? "0" : binary;
}// 将十进制转换为八进制
string decimalToOctal(int n) {string octal = "";while (n > 0) {octal = to_string(n % 8) + octal;n /= 8;}return octal.empty() ? "0" : octal;
}// 将十进制转换为十六进制
string decimalToHex(int n) {string hex = "";const string hexDigits = "0123456789ABCDEF";while (n > 0) {hex = hexDigits[n % 16] + hex;n /= 16;}return hex.empty() ? "0" : hex;
}
代码解析
-
用户输入:
- 程序首先提示用户输入一个整数。
-
输出不同进制的表示:
- 使用
std::dec,std::oct,std::hex分别输出十进制、八进制和十六进制的表示。 - 使用
std::bitset输出二进制表示,这里输出32位以确保足够的位数。
- 使用
-
手动转换函数:
decimalToBinary(int n):将十进制数转换为二进制字符串。decimalToOctal(int n):将十进制数转换为八进制字符串。decimalToHex(int n):将十进制数转换为十六进制字符串。
手动转换的逻辑
-
二进制转换:
- 不断取余数(模2),并将结果拼接到字符串的前面,直到商为0。
-
八进制转换:
- 不断取余数(模8),并将结果拼接到字符串的前面,直到商为0。
-
十六进制转换:
- 不断取余数(模16),并将结果转换为对应的十六进制字符(0-9, A-F),拼接到字符串的前面,直到商为0。
运行示例
假设用户输入 35,程序的输出将是:
请输入一个整数: 35
十进制: 35
八进制: 43
十六进制: 23
二进制: 00000000000000000000000000100011
手动转换 - 二进制: 100011
手动转换 - 八进制: 43
手动转换 - 十六进制: 23
以上就是关于C++中如何控制小数位数以及如何进行四舍五入操作与进制相互转换的详细解释。希望这些信息对你有所帮助!
相关文章:
第十二章--- fixed 和 setprecision 函数、round 函数、进制转换及底层逻辑
1. 保留几位小数 在C中,如果你想要控制输出的小数点后的位数,可以使用<iomanip>头文件提供的fixed和setprecision函数。这里的fixed用于设置浮点数的输出格式为定点表示法,而setprecision(n)则用来指定小数点后保留的位数。具体用法如…...
ASP.NetCore---I18n(internationalization)多语言版本的应用
文章目录 0.实现的效果如下1.创建新项目I18nBaseDemo2.添加页面中的下拉框3.在HomeController中添加ChangeLanguage方法4.在Progress.cs 文件中添加如下代码:5. 在progress.cs中添加code6.添加Resource资源文件7.在页面中引用i18n的变量8. 重启项目,应该…...
vue3 环境配置vue-i8n国际化
一.依赖和插件的安装 主要是vue-i18n和 vscode的自动化插件i18n Ally https://vue-i18n.intlify.dev/ npm install vue-i18n10 pnpm add vue-i18n10 yarn add vue-i18n10 vscode在应用商城中搜索i18n Ally:如图 二.实操 安装完以后在对应项目中的跟package.jso…...
2024 uniapp入门教程 01:含有vue3基础 我的第一个uniapp页面
uni-app官网uni-app,uniCloud,serverless,快速体验,看视频,10分钟了解uni-app,为什么要选择uni-app?,功能框架图,一套代码,运行到多个平台https://uniapp.dcloud.net.cn/ 准备工作:HBuilder X 软件 HBuilder X 官网下载…...
CentOS 7文件系统
从centos7开始,默认的文件系统从ext4变成了XFS。随着虚拟化的应用越来越广泛,作为虚拟化磁盘来源的大文件(单个文件几GB级别)越来越常见。 1.XFS组成部分: XFS文件系统在数据的分布上主要划分为三部分:数据…...
vue源码解析(源码解析学习大纲)
文章目录 Vue源码解析入手方向大纲1.核心概念1-1.响应式系统1-2. 组件1-3. 虚拟DOM1-4. 指令1-5. 生命周期钩子 2.虚拟DOM2-1. 概念2-2. 工作流程2-3. 示例2-4.总结 3.组件系统3-1. 组件的定义3-2. 组件的创建3-3. 组件的模板3-4. 生命周期3-5. 事件处理3-6. 插槽(S…...
工行企业网银U盾展期后有两个证书问题的解决方法
工行企业网银U盾证书快到期后,可以自助展期,流程可以根据企业网银提示页面操作。操作后,可能存在两个新旧两个证书并存的情况,致使网银转账等操作失败,如图: 其原因是新证书生成后,旧证书没有删…...
《Linux从小白到高手》理论篇:文件权限控制及文件操作相关的命令
List item 本篇介绍Linux文件权限控制及文件操作相关的命令,看完本文,有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。 文件权限 在介绍文件权限之前先来复习下Linux的文件类型,始终记住那句话:Linux系统下&a…...
前端框架React的详细的学习方法和过程
学习React作为前端架构的一部分,是一个系统且逐步深入的过程。以下是一个详细的学习方法和过程,可以帮助你有效地掌握React: 1. 理解React的基础知识 首先,你需要了解React的基本概念,包括它是什么、为什么使用它以及…...
linux中缓存,在kafka上应用总结
linux中的缓存 页缓存 pagecatch(读缓存用于提供快速读)块缓存(用于提供其他设备快速写)当对读缓存读的时候,修改了读的数据,页缓存就会被标记为脏数据,等到写的时候它会向块缓存同步数据&…...
前端练习小项目 —— 让图片变得更 “色”
前言:相信读者在学习完了HTML、CSS和JavaScript之后已经想要迫不及待的想找一个小型的项目来练练手,那么这篇文章就正好能满足你的 “需求”。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 在开始学习…...
时间卷积网络(TCN)原理+代码详解
目录 一、TCN原理1.1 因果卷积(Causal Convolution)1.2 扩张卷积(Dilated Convolution) 二、代码实现2.1 Chomp1d 模块2.2 TemporalBlock 模块2.3 TemporalConvNet 模块2.4 完整代码示例 参考文献 在理解 TCN 的原理之前ÿ…...
零散的知识
1.物化 在SQL中,物化(Materialization)是指将查询结果保存为物理数据结构以供后续使用的过程。这与普通的视图或查询不同,物化视图会存储查询的结果,而不是每次查询时都动态地重新计算数据。 ①物化视图 物化视图是一…...
Python读取pdf中的文字与表格
一、PyPDF2包安装 在Python中安装PyPDF2库,您可以使用pip包管理器。打开您的命令行工具(例如CMD、Terminal或Anaconda Prompt),然后输入以下命令: pip install PyPDF2 如果您使用的是Python 3,并且系统中…...
【MySQL 08】复合查询
目录 1.准备工作 2.多表查询 笛卡尔积 多表查询案例 3. 自连接 4.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 1.union 2.union all 1.准备工作 如下三个表,将作为示例,理解复合查询 EMP员工表…...
求1000以内的完数
题目:一个数如果恰好等于他的因子之和(包括1,但不包括这个数),这个数就是完数。编写算法找出1000之内的所有完数,并按下面格式输出其因子:28 its factors are 1,2,4,7,14 代码如下:…...
sqli-labs less-16 post提交dnslog注入
post提交DNSlog注入 第十六关和和十五关大差不大,可以使用布尔注入,时间盲注等,只不过闭合方式不一样,但是用布尔和时间盲太过于消耗时间,本次测试我将使用dnslog注入。 使用在线平台http://www.dnslog.cn/ 闭合方式…...
nginx报错|xquic|xqc_engine_create: fail|
一.问题描述 nginx使用xquic协议一切安装正常,nginx -s reload也正常,但就是访问不了网页 [emerg] 12342#0: |xquic|xqc_engine_create: fail| [emerg] 12342#0: |xquic|ngx_xquic_process_init|engine_init fail| [emerg] 12341#0: |xquic|xqc_engine_create: fai…...
Java虚拟机(JVM)
目录 内存区域划分堆(Heap)方法区(Method Area)程序计数器(Program Counter Register)虚拟机栈(VM Stack)本地方法栈(Native Method Stack) 类加载的过程类加…...
MQ 架构设计原理与消息中间件详解(三)
RabbitMQ实战解决方案 RabbitMQ死信队列 死信队列产生的背景 RabbitMQ死信队列俗称,备胎队列;消息中间件因为某种原因拒收该消息后,可以转移到死信队列中存放,死信队列也可以有交换机和路由key等。 产生死信队列的原因 消息投…...
Vue中实现动态标签页的切换优化与状态管理
1. 动态标签页的核心需求与实现思路 在后台管理系统这类多页面应用中,动态标签页几乎是标配功能。想象一下你正在使用某电商后台,同时开着商品管理、订单处理和用户分析三个页面,这时候标签页的流畅切换和状态保持就显得尤为重要。 我经历过一…...
ESFT-gate-law-lite:法律文本智能分析新工具
ESFT-gate-law-lite:法律文本智能分析新工具 【免费下载链接】ESFT-gate-law-lite ESFT-gate-law-lite是基于HuggingFace的深度学习模型,专为法律领域定制。源自deepseek-ai团队,继承ESFT-vanilla-lite优势,强大而轻量,…...
后端架构师转型AI智能体架构师:3个月实战路径,收藏这份落地指南
如果你本身就是后端/全栈/架构师出身,这意味着你已经有了一套非常扎实的“确定性系统”的构建能力——分布式、高并发、数据库事务、系统稳定性,这些都是你的底牌。 而AI智能体恰恰是“不确定性系统”(大模型)与“确定性系统”&am…...
League-Toolkit英雄联盟辅助工具完全指南:从配置到精通的高效使用手册
League-Toolkit英雄联盟辅助工具完全指南:从配置到精通的高效使用手册 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …...
在 React 中,useRef、ref 属性以及 forwardRef 是处理“引用”(访问 DOM 节点或组件实例)的核心概念
在 React 中,useRef、ref 属性以及 forwardRef 是处理“引用”(访问 DOM 节点或组件实例)的核心概念。它们经常一起使用,但职责完全不同。以下是它们的核心区别、使用方法及组合示例:1. 核心概念与区别特性ref (属性)u…...
ReplaceItems.jsx:Adobe Illustrator批量对象替换的终极解决方案
ReplaceItems.jsx:Adobe Illustrator批量对象替换的终极解决方案 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Illustrator中重复的替换操作而烦恼吗࿱…...
AI写论文不再难,4款AI论文生成工具带你开启高效写作之旅!
在2025年愈演愈烈的学术写作智能化趋势中,越来越多的人选择借助AI写论文工具。现实中许多这样的工具在撰写硕士、博士论文等长篇学术作品时,常常缺乏必要的理论深度,逻辑也显得比较松散。普通的AI论文写作工具显然无法满足这些专业写作的需求…...
2026最新Java金三银四面试参考指南公开!
想必有很多小伙伴这会已经在为金三银四面试跳槽做准备了。临近面试肯定是要想办法提升自己的面试能力,这个时候如果还去一昧地提升自己的代码能力对面试是毫无帮助的。大多数人在面试的时候都会遇到以下几种情况(大家可以看看自己中了几个)&a…...
Claude Code 工程化实战:从工具使用者到 Agent 构建者的进阶之路
Claude Code 工程化实战:从工具使用者到 Agent 构建者的进阶之路 声明: 📝 作者:甜城瑞庄的核桃(ZMJ) 原创学习笔记,欢迎分享,但请保留作者信息及原文链接哦~ 摘要&#…...
从‘Hello World’到视频监控:用QT+海康SDK开发你的第一个安防应用
从‘Hello World’到视频监控:用QT海康SDK开发你的第一个安防应用 第一次看到海康威视摄像头的实时画面在自己的程序里跳出来时,那种成就感比写一百个"Hello World"都来得强烈。作为一位刚接触QT的开发者,你可能已经厌倦了按钮和文…...
