C++ 中奇怪的 double 到 int 转换行为

2023-12-02

以下程序显示了我在 C++ 中看到的奇怪的 double 到 int 转换行为:

#include <stdlib.h>
#include <stdio.h>

int main() {
  double d = 33222.221;
  printf("d = %9.9g\n",d);

  d *= 1000;
  int i = (int)d;

  printf("d = %9.9g | i = %d\n",d,i);

  return 0;
}

当我编译并运行该程序时,我看到:

g++ test.cpp
./a.out
d = 33222.221
d =  33222221 | i = 33222220

为什么 i 不等于 33222221? 编译器版本为GCC 4.3.0


浮点表示几乎从来都不精确(仅在特殊情况下)。每个程序员都应该阅读以下内容:每个计算机科学家都应该了解的浮点运算知识

简而言之 - 你的号码可能是 33222220.99999999999999999999999999999999999999999999999999999999999999998 (或类似的东西),截断后变成 33222220 。

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

C++ 中奇怪的 double 到 int 转换行为 的相关文章

  • boost::asio + std::future - 关闭套接字后访问冲突

    我正在编写一个简单的 TCP 客户端来发送和接收单行文本 异步操作由 std future 处理 以便于超时阻塞查询 不幸的是 我的测试应用程序在破坏服务器对象时因访问冲突而崩溃 这是我的代码 TCP客户端 hpp ifndef TCPCL
  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的

随机推荐

  • Android BLE扫描模式设置间隔

    我正在编写一个小型测试应用程序来评估蓝牙模块 该应用程序当前正在使用积极的匹配模式和低延迟扫描模式进行扫描 我们控制了蓝牙模块的广告间隔 并正在尝试评估需要多少广告才能触发android中的回调 有谁知道与低延迟 平衡和低功耗扫描模式设置相
  • 使用 Java 在 GUI 编程中混合 awt 和 swing

    我在 SO 上读到混合 awt 和 swing 对于 Java 中的 GUI 编程来说并不是一个好的方法 但我无法找到任何在使用 swing 时不使用某些 awt 组件的示例 例如 即使使用 swing 我遇到的大多数示例也会使用 awt
  • MySQL:如何查询父子关系?

    假设有如下表记录 TABLE foo foo id foo parent id 1 NULL 2 NULL 3 1 4 2 5 1 6 1 7 2 8 1 9 NULL
  • Log4J 2 查找值在加载/呈现之前在配置中使用

    我正在使用 SystemPropertiesLookup 查找来配置我的 Log4J2 配置 系统属性被设置为我的主要方法中的第一行 问题是 当 Log4J 加载配置时 尚未调用 main 方法 因此系统属性尚未填充 这是我的 log4j2
  • 模板类 - 无法解析的外部符号[重复]

    这个问题在这里已经有答案了 我经常收到这个错误 但我不知道为什么 有人可以帮我找到原因吗 编辑 删除代码 将实现 您的方法定义 与类声明一起放入标头中 请参阅这在 C 常见问题解答中 一些编译器支持 export 关键字来按照您的方式执行此
  • 获取上次打开的 MS Word 文档对象

    我有一个从 MS Word 2003 模板 dot 中的 VBA AutoNew 子函数调用的 python 脚本 因此每次从此 Word 模板创建文档时它都会运行 第三方应用程序从此模板创建文档 第三方应用程序如何设置文档存在许多格式问题
  • 多态类中的虚拟析构函数

    我知道只要有一个多态基类 该基类就应该定义一个虚拟析构函数 这样当一个指向派生类对象的基类指针被删除时 它会先调用派生类的析构函数 如果我在这里错了 请纠正我 另外 如果基类析构函数是非虚拟的 则删除指向派生对象的基类指针将是未定义的行为
  • 如何在 .NET MAUI Flyout Shell 应用程序中自定义标题?

    如何缩小标题间距 当我更改汉堡图标时 其图标颜色始终为白色 怎么了 我可以设置标题字体大小和字体系列吗 在 Android 上可以设置contentInsetLeft contentInsetStart contentInsetStartW
  • 如何在 Python 中对文本文件中的数字求和

    我有一个代码依赖于我读取一个文本文件 在有数字的地方打印数字 在有字符串而不是数字的地方打印特定的错误消息 然后将所有数字相加并打印它们的总和 然后只保存编号到新的文本文件 我已经尝试这个问题几个小时了 我得到了下面写的内容 我不知道为什么
  • PyQt/PySide中连接点击信号时lambda和partial的区别

    当将一组按钮中的多个单击信号连接到带有参数的单个槽函数时 我遇到了信号槽问题 lambda and functools partial可以使用如下 user user button clicked connect lambda callus
  • 如何在 IntelliJ 中调试多线程应用程序?

    我在 IntelliJ IDEA 14 0 2 中遇到了一个关于多线程和断点的奇怪问题 断点之后的代码会在断点处停止之前执行 import java util concurrent atomic AtomicInteger public c
  • 使用 jQuery、JSON 和 AJAX 填充下拉列表

    就像标题所说 我正在尝试使用 jQuery JSON 和 AJAX 创建一个下拉菜单 尽管我熟悉理论但尚未将其付诸实践 任何建议 演示代码片段或教程将不胜感激 因为我希望有一个最好的开始 提前致谢 您需要执行 getJSON 调用以在 do
  • 无法使用 Flask 从下拉列表中获取在 python 中选择的值

    这个问题可能是重复的 但我已经检查了此类相关问题的所有答案 但无法解决 我试图从由数字组成的下拉菜单中获取值 然后我想将数字与值进行比较并根据比较显示文本 Eg if value selected from dropdown gt 3 di
  • 在设定的时间从睡眠中唤醒应用程序

    我想让我的应用程序进入睡眠状态 然后在设定的时间唤醒它 我让它睡觉但不会醒来 这设置了唤醒锁 private void setWakeLock System out println wakelock PowerManager pm Powe
  • ReactJS、event.currentTarget 与 Vanilla Javascript 的行为不同

    我想知道是否有类似的事情event currentTargetReactJS中存 在问题 使用event targetonclick 是我得到的childDiv而不是parentDiv 普通 JavaScript 示例 document g
  • 如何使用 bash 脚本计算单词中最常出现的 3 个字母序列

    我有一个示例文件 例如 XYZAcc ABCAccounting Accounting firm Accounting Aco Accounting Acompany Acoustical consultant 这里我需要 grep 一个单
  • 根据一个向量对多个向量进行排序[重复]

    这个问题在这里已经有答案了 我有四个向量 其中包含圆心的 x y 半径和重量信息 我想按重量顺序对它们进行排序 从最高到最低 但我真的不知道如何或从哪里开始 我可以把所有的向量放在一个Eigen Tensor如果有帮助的话 将收集的数据保存
  • Jqgrid 许可证(具有 MIT/GPL v2)与 Guriddo jqGrid JS(知识共享许可证)

    我在网站应用程序的开发环境中使用 jqGrid 4 5 4 版本 并希望在商业网站上发布应用程序时使用相同的版本 我的疑问是 最近我看到了 Guriddo Jqgrid 4 7 1 的最新版本及其新许可证 知识共享许可 请告诉我现在可以在商
  • 如何使Code Runner在外部终端(命令提示符)中运行?

    所以 基本上Visual Studio Code中的Code Runner可以在集成终端中运行 我怎样才能让它在外部终端中运行 这是命令提示符 因为我需要向我的同学展示我的程序的输出 所以通过集成的终端显示它并不方便 我知道有一个像 Dev
  • C++ 中奇怪的 double 到 int 转换行为

    以下程序显示了我在 C 中看到的奇怪的 double 到 int 转换行为 include