C#中的Double类型精度不是15位吗?

2023-11-29

我正在测试这段代码脑筋急转弯:

        double d1 = 1.000001;

        double d2 = 0.000001;

        Console.WriteLine((d1 - d2) == 1.0);

结果是“假”。当我更改数据类型时:

        decimal d1 = 1.000001M;

        decimal d2 = 0.000001M;

        decimal d3 = d1-d2;

        Console.WriteLine(d3 == 1);

程序写出正确答案:“True”。

本题仅使用浮点数后6位数字。 15位精度发生了什么?


这与精度无关——它与代表性舍入误差有关。

System.Decimal能够表示大浮点数,并且大大降低了发生像您所看到的那样的舍入错误的风险。System.Single and System.Double无法做到这一点,并且会将这些数字四舍五入并产生类似于您在示例中看到的问题。

System.Decimal使用缩放因子来保存小数位的位置,从而允许精确表示给定的浮点数,而System.Single and System.Double只尽可能地估算您的价值。

欲了解更多信息,请参阅System.Double:

请记住,浮点数 只能近似为十进制数, 并且a的精度 浮点数决定如何 准确地说,这个数字近似于 小数。默认情况下,双 值包含 15 位十进制数字 精度,虽然最大为 17 数字是内部维护的。这 浮点数的精度 有几个后果:

  • 对于特定的情况,两个浮点数看起来相等 精度可能不相等 因为他们的最低有效数字 是不同的。

  • 使用浮点的数学或比较运算 数字可能不会产生相同的结果 如果使用十进制数,因为 浮点数可能不会 精确近似小数 数字。

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

C#中的Double类型精度不是15位吗? 的相关文章

  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p

随机推荐

  • 游戏中心好友列表

    All 我为 Apple iOS 制作了一款游戏 现在我想在苹果游戏中心显示我的好友列表 如何在 iPhone 上显示登录玩家的 Game Center 好友列表 可能使用 UIViewController 管理 ViewControlle
  • 如何在堆叠栏中显示每个日期范围的多个堆叠列

    本质上 目的是比较团队中每个成员每周执行的任务类别 我想在轴下方添加周数而不是 1 0 2 0 和 3 0 我得到了错误的结果 因为它仅显示 1 表示优秀 并且所有周 1 周 2 周 3 周 4 我选择开始日期为 1 12 2014 结束日
  • 获取传单中图层中的标记数

    我有一个 Leaflet 地图 其中有一个名为 flickrpics 的图层 该图层根据当前地图视图的 bbox 在 geojson 中动态加载 我想获得该图层中标记数量的简单计数 以便可以将其显示在图层控件中的图层标签旁边 我尝试过像 f
  • 语法错误,意外的“ ” (T_STRING)

    为什么我的 PHP 邮件代码总是给出 语法错误 第 4 行 C xampp htdocs GSP members php 中出现意外的 T STRING
  • 具有 2 个 y 轴的 Seaborn 箱线图

    如何创建具有 2 个 y 轴的 seaborn 箱线图 由于规模不同 我需要这个 我当前的代码将覆盖箱线图中的第一个框 例如 它由第一个轴的第一个数据项和第二个轴的第一个数据项填充 import pandas as pd import nu
  • 使用录制文件 .3gp 时,MediaPlayer 准备失败错误(1,-17)

    我正在尝试从 AudioRecorder 进行录制 然后尝试使用媒体播放器进行相同的播放 但它给出的 mediaplayer prepare 无法准备 谁能告诉我什么是合适的理由 下面是我正在使用的代码 public void onClic
  • UIScrollView无限滚动?

    有谁知道我如何创建无限滚动 4 Track iPhone 应用程序就是一个很好的例子 曲目编号上方和时间指示器下方有可滚动的 轮子 我假设它使用 UIScrollView 然后在滚动到视图时绘制子视图 有小费吗 source 3dbcrea
  • 在 Code::blocks 中调试

    如何在代码块中进行调试 我设置了几个断点并按下了调试 启动 但程序不会在任何这些断点处停止 我需要做什么才能让它发挥作用 我不知道你是否已经解决了 但我也遇到了同样的问题 并且刚刚解决了 我已经搜索过a lot一切都结束了 最终问题是 项目
  • 为非交互式 shell 获取 .bashrc 的正确方法

    我一直在尝试解决问题 以便能够在多个节点上运行 openmpi 最初我有一个问题 PATH and LD LIBRARY PATH变量未更新自 bashrc由 openmpi 会话创建的文件 所以我手动添加 prefix path to o
  • 熊猫从长到宽(未融化或类似?)[重复]

    这个问题在这里已经有答案了 我有一个像这样的融化的长格式数据框 name A A B B varA 1 2 1 2 varB 200 250 200 250 val 4 8 1 0 df pd DataFrame data zip name
  • 使用 BindingSource 的 Filter 属性时如何正确转义 SQL

    我继承了一个 C 应用程序 它通过 DataGridView 列出数据库表中的数据 还有一些用于过滤该数据的文本字段 这样做是这样的 String listFilter string Format City 0 this toolStrip
  • 地理编码器可以在模拟器上使用吗

    我正在使用地理编码器 它在我的设备上工作得很好 但在模拟器上不起作用 在 2 2 和 4 2 2 上尝试过它不起作用 这是我的代码 Geocoder myLocation new Geocoder AzanTime this Locale
  • 这是 WebMatrix PageData 中的错误吗?

    我想我可能在 WebMatrix 的 PageData 中发现了一个错误 但我不确定 它涉及如何将数据从部分页面传递回调用页面 在 WebMatrix 文档中 教程 例如 3 创建一致的外观 以及示例代码 建议将 PageData 作为在页
  • 通过批处理文件从 XML 文件中提取文本

    我必须通过批处理文件从 XML 文件中提取某些文本 我需要提取的部分之一是字符串标签之间
  • Java 和 php5 MD5 哈希之间的区别

    我面临着一个奇怪的问题 它与 Java 和 php5 中的 MD5 哈希相关 我认为在某些情况下以下代码不会 生成正确的 MD5 哈希值 public static String getMD5Hash String string try M
  • 使用 gdata xml 解析带有名称空间的 xml

    我正在开发一个ios应用程序 我正在用gdataxml解析我的xml 但我做错了 我的nslog为空 NSError error nil GDataXMLDocument xmlResult GDataXMLDocument alloc i
  • 如何解决错误:storage.mode(x) <-“double”中的错误:无法强制“list”对象输入“double”

    您好 我正在尝试运行 som 和 kmeans 分析 但我无法解决它 因为有一个错误代码 storage mode x 我怎么解决这个问题 cdata lt read delim Cluster txt stringsAsFactors F
  • 如何在 Flutter For Web 上发出 HTTP 请求?

    我正在构建一个向 NodeJS 服务器执行 HTTP 请求的应用程序 但是当我执行 HTTP 请求时 结果如下 Access to XMLHttpRequest at http 127 0 0 1 8000 from origin http
  • GitLab HTTP URL 上的 504 网关超时

    我已经在 Linux 机器上安装了 GitLab 6 0 并创建了许多项目 我可以使用 SSH URL 创建每个项目的本地克隆 但是当我尝试使用 HTTP URL 时 我得到一个504 网关超时 秒 当我将 HTTP URL 粘贴到 Sou
  • C#中的Double类型精度不是15位吗?

    我正在测试这段代码脑筋急转弯 double d1 1 000001 double d2 0 000001 Console WriteLine d1 d2 1 0 结果是 假 当我更改数据类型时 decimal d1 1 000001M de