如何在 C++ 中显示浮点值的多个前导零? [复制]

2024-01-07

在 C++ 程序中,我想显示一列浮点值,以便符号、数字和小数点全部对齐。必要时,多个前导零应填充每个值的整数部分。例如:

A column of floating point values:
  +000.0012
  -000.0123
  +000.1235
  -001.2346
  +012.3457
  -123.4568

我有一个经过精心注释的测试程序来证明这个问题。但是,当我编辑这篇文章时,我在这里找到了我需要的答案:
- 使用 printf 打印浮点数时额外的前导零? https://stackoverflow.com/questions/2486410/

根本问题是我使用的格式代码为"%+04.4f"当我应该使用"%+09.4f",因为我想要的总字段宽度是 9:

  • 1 为标志
  • 3 表示所有数字
  • 1 为小数点
  • 4 表示小数位

我没有足够的声誉点来评论该帖子,所以在这里谢谢你,@AndiDog。

我仍然不知道如何仅使用流格式化标志来获取多个前导零。但这是另一天的战斗。我现在将坚持使用 printf 和 Stream 的混合。


有几条评论提到std::setfill('0') and std::setw。虽然这些are必要的,但它们不足以完成任务。例如,这段代码:

std::cout << std::setfill('0') << std::setw(7) << std::showpos << 0.012;

将产生:0+0.012作为其输出。这显然不完全是我们想要的。

我们需要添加std::internal标志告诉流插入“内部填充”——即填充应该插入在符号和数字的其余部分之间,所以代码如下:

std::cout << std::setfill('0') << std::setw(7) << std::internal << std::showpos << 0.012;

...产生我们想要的输出:+00.012.

另请注意,填充字符是“粘性”的,因此如果您交替使用std::setw对于数字和非数字类型,您可能每次都需要/想要更改它。否则,类似的事情std::cout << setw(12) << name;将产生如下结果:0000000Jerry,这也是很少需要的。

为了确保小数点后的位数始终相同,我们还需要设置std::fixed标志,并指定位数std::setprecision, 例如:

#include <iostream>
#include <iomanip>
#include <vector>

int main() {
    std::vector<double> values { 0.1234, 1.234, 1.5555 };

    for (auto d : values)
        std::cout << std::internal << std::showpos << std::setw(9) 
                  << std::setprecision(3) << std::setfill('0') << d << "\n";
}

这会产生我认为需要的输出:

+0000.123
+0001.234
+0001.556

但在一种情况下,您将无法通过这种方式获得对齐的结果:如果您的数字太大而无法放入所提供的字段中,则仍将打印小数点之前的所有位。例如,如果我们添加1e10对于前面的代码要打印的数字列表,它将打印为:+10000000000.000,这显然与其他部分不一致。

处理这个问题的明显方法就是忍受它,如果它经常出现而需要关心,则增加字段大小以容纳更大的数字。

另一种可能性是仅在数字低于特定阈值时使用固定记数法,并针对较大的数字切换到(例如)科学记数法。

至少根据我的经验,这样的代码往往主要用于财务数据,在这种情况下,后一种选择通常是不可接受的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C++ 中显示浮点值的多个前导零? [复制] 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • moment.js isValid 函数无法正常工作

    我有这个问题 我没有找到任何类似的东西 而且似乎很奇怪没有人在使用 moment js 验证时间时遇到这个问题 moment 03 55 HH mm isValid true moment 03 55jojojo HH mm isValid
  • 检查数组中每个文本框的标签

    如何检查数组中所有 TextBox 控件的 Tag 属性 我想要这样的东西 If textBox Tag And textbox2 Tag And textbox21 Tag And textbox22 Tag And textbox23
  • CSS“snap-scroll”干扰 jQuery“.animatescrollLeft”

    我有一个 html 和 css 滑块 我正在使用scroll snap用于手动滚动和用于自动滚动的 jQuery 按钮 然而 当使用scroll snap type x mandatory jQueryscrollLeft动画变得极其滞后或
  • AngularJS 数据绑定不起作用 - 在控制器范围内变量未显示输入的值

    我有一个奇怪的情况 scope变量绑定似乎没有按预期工作 这是 HTML div class input group style width 100px div
  • 初始化哈希值

    我经常写这样的东西 a hash x a hash x some more text a hash x first text 应该有更好的方法来做到这一点 但我找不到 有两种方法可以为 a 创建初始值Hash 一种是将单个对象传递给Hash
  • 相当于 ftp put 并追加到 scp 中

    我有一个我无法理解的遗留脚本 该脚本是将unix中的4个文件 2个ebcdic格式文件和2个pdf文件 通过ftp传输到主机上 ebcdic format file 1 is abc xyz ebcdic format file 2 is
  • DLL、内存映射、基地址、内存使用和.NET?

    在开始真正的问题之前 我想说的是 我可能会弄错一些细节 如果是这样 请逮捕我 甚至不要回答我的问题 我的问题基本上是关于 DLL 和 NET 我们有一个应用程序使用了大量内存 我们正在尝试找出如何正确测量内存的方法 特别是当问题主要发生在客
  • 列出 MySQL 表外键的高效方法?

    有没有表演者如何获取分配给 MySQL 表的外键列表 查询信息模式 SELECT column name referenced table schema AS foreign db referenced table name AS fore
  • Linq To Sql:异常“字符串必须恰好是一个字符长”

    考虑使用以下定义的 SQL Server 表varchar 1 NULL场地 它被用来存储性别特征 有些行有数据 有些没有 要么为空 要么为空白 授予空白应该为空 但请考虑空白在这里是一个有效值 我更希望该值为空 ID Gender 1 M
  • awk 减少系统依赖性

    如果我没记错的话 awk 会根据操作系统语言解析数字 例如 echo 1 2 awk printf f n 1 在英语系统中将被解释为 1 在用逗号分隔整数和小数部分的系统中将被解释为 1 2 我不知道C printf是否也这样做 所以我添
  • 访问 iOS 中最近使用的表情符号列表

    在 iOS 中 在原生表情符号键盘中 您可以看到最近使用的表情符号 我想知道是否可以从我的应用程序内部获取这些表情符号 独立于应用程序 的数据 我的目标是在我的应用程序中显示给定用户最常用的表情符号 如果您只想要一个表情符号选择器 您可以使
  • Log4Net停止记录,如何恢复?

    我遇到了 log4net c WinForms 的问题 如果出现短暂故障 例如由于 VMware 快照 网络共享在几秒钟内无法访问 它会停止记录 并且似乎没有记录的方法可以从此类故障中恢复中断 它只是停止记录 直到应用程序重新启动 版本 v
  • 验证地点所有者 Google Places API

    我正在计划一个应用程序 企业所有者可以在其中注册自己的位置 我想使用 Google Places API 来获取企业信息 这样 当新用户在应用程序中注册时 他会提供其位置的 ID 然后应用程序会从 API 检索该信息 我将需要某种方法来验证
  • 如何使用处理和 Twitter4j 从用户时间线获取 20 多个结果?

    我正在尝试制作一个草图 从特定用户的 Twitter 时间轴中获取最后 100 条推文 我正在使用 Twitter4j 草图工作正常 但我了解到 Twitter4J 默认情况下将时间线结果限制为 20 我已经看到此页面来了解如何在使用查询时
  • 从 WSL 选择 Python 解释器

    我使用的是 Windows 10 并且希望将 Python 的默认 VSCode 解释器设置为与我的 WSL 2 Ubuntu 中使用的解释器相同 以便我始终使用 一个 Python 当我单击 选择 Python 解释器 时 会出现查找解释
  • 有没有办法防止回调在破折号中触发?

    我有以下回调 app callback Output useridPicker value Output datePicker date Input url search def update form default url search
  • 使用 Google 位置 API

    请原谅我的无知 但经过几个小时的搜索 我运气不佳 无论如何 我正在尝试编写一个小型桌面应用程序 允许用户输入地址 然后以 GPS 坐标返回其大致位置 据我所知 Google 提供了一个地理编码 API 1 允许以下形式的请求 http ma
  • 在 pandas 数据框中添加一个具有 MultiIndex 列的字段

    我一直在寻找这个问题的答案 因为它看起来很简单 但还没有找到任何东西 如果我错过了什么 抱歉 我有 pandas 版本 0 10 0 并且我一直在尝试以下形式的数据 import pandas import numpy as np impo
  • 如何使用 jQuery 删除 HTML 和特殊字符?

    所以我想要做的是删除所有 HTML 表格标签元素 只留下链接标签 table border 0 cellpadding 1 cellspacing 0 tbody tr valign top td class headlines td td
  • 如何在 C++ 中显示浮点值的多个前导零? [复制]

    这个问题在这里已经有答案了 在 C 程序中 我想显示一列浮点值 以便符号 数字和小数点全部对齐 必要时 多个前导零应填充每个值的整数部分 例如 A column of floating point values 000 0012 000 0