当前位置: 首页 > news >正文

第十二章--- fixed 和 setprecision 函数、round 函数、进制转换及底层逻辑

1. 保留几位小数

在C++中,如果你想要控制输出的小数点后的位数,可以使用<iomanip>头文件提供的fixedsetprecision函数。这里的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;
}
代码解析
  1. 用户输入

    • 程序首先提示用户输入一个整数。
  2. 输出不同进制的表示

    • 使用 std::dec, std::oct, std::hex 分别输出十进制、八进制和十六进制的表示。
    • 使用 std::bitset 输出二进制表示,这里输出32位以确保足够的位数。
  3. 手动转换函数

    • 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中&#xff0c;如果你想要控制输出的小数点后的位数&#xff0c;可以使用<iomanip>头文件提供的fixed和setprecision函数。这里的fixed用于设置浮点数的输出格式为定点表示法&#xff0c;而setprecision(n)则用来指定小数点后保留的位数。具体用法如…...

ASP.NetCore---I18n(internationalization)多语言版本的应用

文章目录 0.实现的效果如下1.创建新项目I18nBaseDemo2.添加页面中的下拉框3.在HomeController中添加ChangeLanguage方法4.在Progress.cs 文件中添加如下代码&#xff1a;5. 在progress.cs中添加code6.添加Resource资源文件7.在页面中引用i18n的变量8. 重启项目&#xff0c;应该…...

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&#xff1a;如图 二.实操 安装完以后在对应项目中的跟package.jso…...

2024 uniapp入门教程 01:含有vue3基础 我的第一个uniapp页面

uni-app官网uni-app,uniCloud,serverless,快速体验,看视频&#xff0c;10分钟了解uni-app,为什么要选择uni-app&#xff1f;,功能框架图,一套代码&#xff0c;运行到多个平台https://uniapp.dcloud.net.cn/ 准备工作&#xff1a;HBuilder X 软件 HBuilder X 官网下载&#xf…...

CentOS 7文件系统

从centos7开始&#xff0c;默认的文件系统从ext4变成了XFS。随着虚拟化的应用越来越广泛&#xff0c;作为虚拟化磁盘来源的大文件&#xff08;单个文件几GB级别&#xff09;越来越常见。 1.XFS组成部分&#xff1a; XFS文件系统在数据的分布上主要划分为三部分&#xff1a;数据…...

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. 插槽&#xff08;S…...

工行企业网银U盾展期后有两个证书问题的解决方法

工行企业网银U盾证书快到期后&#xff0c;可以自助展期&#xff0c;流程可以根据企业网银提示页面操作。操作后&#xff0c;可能存在两个新旧两个证书并存的情况&#xff0c;致使网银转账等操作失败&#xff0c;如图&#xff1a; 其原因是新证书生成后&#xff0c;旧证书没有删…...

《Linux从小白到高手》理论篇:文件权限控制及文件操作相关的命令

List item 本篇介绍Linux文件权限控制及文件操作相关的命令&#xff0c;看完本文&#xff0c;有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。 文件权限 在介绍文件权限之前先来复习下Linux的文件类型&#xff0c;始终记住那句话&#xff1a;Linux系统下&a…...

前端框架React的详细的学习方法和过程

学习React作为前端架构的一部分&#xff0c;是一个系统且逐步深入的过程。以下是一个详细的学习方法和过程&#xff0c;可以帮助你有效地掌握React&#xff1a; 1. 理解React的基础知识 首先&#xff0c;你需要了解React的基本概念&#xff0c;包括它是什么、为什么使用它以及…...

linux中缓存,在kafka上应用总结

linux中的缓存 页缓存 pagecatch&#xff08;读缓存用于提供快速读&#xff09;块缓存&#xff08;用于提供其他设备快速写&#xff09;当对读缓存读的时候&#xff0c;修改了读的数据&#xff0c;页缓存就会被标记为脏数据&#xff0c;等到写的时候它会向块缓存同步数据&…...

前端练习小项目 —— 让图片变得更 “色”

前言&#xff1a;相信读者在学习完了HTML、CSS和JavaScript之后已经想要迫不及待的想找一个小型的项目来练练手&#xff0c;那么这篇文章就正好能满足你的 “需求”。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 在开始学习…...

时间卷积网络(TCN)原理+代码详解

目录 一、TCN原理1.1 因果卷积&#xff08;Causal Convolution&#xff09;1.2 扩张卷积&#xff08;Dilated Convolution&#xff09; 二、代码实现2.1 Chomp1d 模块2.2 TemporalBlock 模块2.3 TemporalConvNet 模块2.4 完整代码示例 参考文献 在理解 TCN 的原理之前&#xff…...

零散的知识

1.物化 在SQL中&#xff0c;物化&#xff08;Materialization&#xff09;是指将查询结果保存为物理数据结构以供后续使用的过程。这与普通的视图或查询不同&#xff0c;物化视图会存储查询的结果&#xff0c;而不是每次查询时都动态地重新计算数据。 ①物化视图 物化视图是一…...

Python读取pdf中的文字与表格

一、PyPDF2包安装 在Python中安装PyPDF2库&#xff0c;您可以使用pip包管理器。打开您的命令行工具&#xff08;例如CMD、Terminal或Anaconda Prompt&#xff09;&#xff0c;然后输入以下命令&#xff1a; pip install PyPDF2 如果您使用的是Python 3&#xff0c;并且系统中…...

【MySQL 08】复合查询

目录 1.准备工作 2.多表查询 笛卡尔积 多表查询案例 3. 自连接 4.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 1.union 2.union all 1.准备工作 如下三个表&#xff0c;将作为示例&#xff0c;理解复合查询 EMP员工表…...

求1000以内的完数

题目&#xff1a;一个数如果恰好等于他的因子之和&#xff08;包括1&#xff0c;但不包括这个数&#xff09;&#xff0c;这个数就是完数。编写算法找出1000之内的所有完数&#xff0c;并按下面格式输出其因子&#xff1a;28 its factors are 1,2,4,7,14 代码如下&#xff1a;…...

sqli-labs less-16 post提交dnslog注入

post提交DNSlog注入 第十六关和和十五关大差不大&#xff0c;可以使用布尔注入&#xff0c;时间盲注等&#xff0c;只不过闭合方式不一样&#xff0c;但是用布尔和时间盲太过于消耗时间&#xff0c;本次测试我将使用dnslog注入。 使用在线平台http://www.dnslog.cn/ 闭合方式…...

nginx报错|xquic|xqc_engine_create: fail|

一.问题描述 nginx使用xquic协议一切安装正常,nginx -s reload也正常&#xff0c;但就是访问不了网页 [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)

目录 内存区域划分堆&#xff08;Heap&#xff09;方法区&#xff08;Method Area&#xff09;程序计数器&#xff08;Program Counter Register&#xff09;虚拟机栈&#xff08;VM Stack&#xff09;本地方法栈&#xff08;Native Method Stack&#xff09; 类加载的过程类加…...

MQ 架构设计原理与消息中间件详解(三)

RabbitMQ实战解决方案 RabbitMQ死信队列 死信队列产生的背景 RabbitMQ死信队列俗称&#xff0c;备胎队列&#xff1b;消息中间件因为某种原因拒收该消息后&#xff0c;可以转移到死信队列中存放&#xff0c;死信队列也可以有交换机和路由key等。 产生死信队列的原因 消息投…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...