C# 小数舍入不一致吗?

2024-01-16

我一直在与来自 SQL Decimal (38,30) 的 C# 中的小数精度作斗争,最终我终于将其实现了四舍五入的奇怪效果。我知道我可能忽略了这里显而易见的事情,但我需要一点洞察力。

我遇到的问题是 C# 无法产生我认为一致的输出。

decimal a = 0.387518769125m;
decimal b = 0.3875187691250002636113061835m;

Console.WriteLine(Math.Round(a, 11));
Console.WriteLine(Math.Round(b, 11));
Console.WriteLine(Math.Round(a, 11) == Math.Round(b, 11));

Yields

0.38751876912
0.38751876913
False

呃,0.38751876913?真的吗?我在这里缺少什么?

From MSDN http://msdn.microsoft.com/en-us/library/ms131275.aspx:

如果小数位上的数字是奇数,则将其更改为偶数。否则,它保持不变。

为什么我看到的结果不一致?额外的精度不会改变“小数位中的数字”......


来自 MSDN:

如果有一个非零数字d向右 of the decimals小数点位置它的值为5,小数点位置上的数字如果是奇数则四舍五入,或者如果是偶数则保持不变. If d小数位数少于decimals, d返回原样。

在你的第一种情况下

decimal a = 0.387518769125m;
Console.WriteLine(Math.Round(a, 11));

there 右边是一位数字第11名中,这个数字是5。所以,由于位置 11 是偶数,因此保持不变。因此,你得到

0.38751876912

在你的第二种情况下

decimal b = 0.3875187691250002636113061835m;
Console.WriteLine(Math.Round(b, 11));

there 右边不是一位数字第 11 位。因此,这是直接对小学进行四舍五入;如果下一个数字大于 4,则向上舍入,否则向下舍入。由于第 11 位右边的数字大于 4(是 5),因此我们四舍五入,以便您看到

0.38751876913

为什么我看到的结果不一致?

你不。结果与文档完全一致。

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

C# 小数舍入不一致吗? 的相关文章

随机推荐

  • 如果发出 SIGINT 或 SIGSTP,是否会调用析构函数?

    我有一个带有用户定义析构函数的类 如果类最初被实例化 然后在程序运行时发出 SIGINT 在 unix 中使用 CTRL C 析构函数会被调用吗 SIGSTP unix 中的 CTRL Z 的行为是什么 不会 默认情况下 大多数信号都会导致
  • 分离 __iter__ 和 __next__ 方法

    在Python 3中 通过定义一个类同时成为可迭代器和迭代器是标准过程 iter and next 方法 但我很难理解这一点 以创建一个仅生成偶数的迭代器为例 class EvenNumbers def init self max self
  • .STACK 未在 MASM 中分配正确的大小

    基于微软MASM文档 https learn microsoft com en us cpp assembler masm dot stack view vs 2019 STACK指令的用法是 与 MODEL 一起使用时 定义堆栈段 段名称
  • jQuery 显示带有 More 和 Less 链接的第一个 X 元素

    我试图找到一个 jQuery 解决方案 在左侧导航过滤器中显示每个菜单上的前 3 个项目 并带有 显示更多 和 显示更少 链接 使用户能够扩展列表 我已经寻找了一个解决方案 但大多数展开 折叠脚本完全隐藏图层 而其他脚本则显示展开 显示更多
  • Android 应用程序仅在发布 APK 时崩溃

    我有一个好奇的问题 我构建了一个在调试模式下运行良好的应用程序 直接调试我的手机并在手机上安装了调试 APK 但如果我使用发布构建 APK 该应用程序会在某一时刻崩溃 我发现应用程序在发布 APK 时崩溃 但我不知道为什么以及我能做什么 p
  • Passenger Standalone 在触摸 restart.txt 时不会重新启动

    我构建了一个小部署脚本 其工作方式与 Capistrano 类似 它将 Rails 应用程序检出到带时间戳的目录并设置current当一切顺利时链接到该链接 问题是 在触摸 tmp restart txt 时 什么也没有发生 我想知道这是否
  • 匹配两个列表之间的相似元素

    我是 python 新手 所以如果这是一个愚蠢的问题 我深表歉意 我有两个清单 L1 marvel audi mercedez honda and L2 marvel comics bmw mercedez benz audi 我想提取其中
  • 在 Windows 上安装 pyspark

    我可以做一个pip install pyspark在我的窗户上 当我尝试运行下面的示例脚本时 它告诉我我的SPARK HOME未设置 我还需要设置 SPARK HOME 吗 我该怎么做 我在网上提到的博客从 Spark 网站手动提取 Spa
  • 如何禁用 kubernetes 中 2 个不同命名空间中的 pod 之间的交叉通信

    我有 2 个命名空间和 1 个 Pod 每个命名空间中运行 1 个服务 Example Namespace 1 default Pod pod1 Service pod1service Namespace 2 test Pod pod1 S
  • 将时间戳与续集查询中的日期进行比较

    I have createdAt将值存储为的列 2018 11 07 15 03 16 532 00 我想写这样的查询select from table name where createdAt input date 我的input dat
  • 如何在柱形图中隐藏零值

    我正在使用柱形图并将这些值显示在每个条形的顶部 如果值为 0 我不想显示这些值 该怎么做 这是我的代码 var series data dataLabels enabled true color black align right x 3
  • 随机状态代码:连接到 lambda 的 AWS api 网关出现 502 错误

    我使用代理集成通过 api 网关公开了多个 lambda 有时我会收到状态代码 502 的奇怪错误 lambda 云监视日志中没有任何内容 下面我发布了示例请求的 API 网关日志 0cbbd9f5 f1bd 11e7 92c0 4d5d3
  • Android Studio模拟器参数

    Android studio 使用这样的命令行启动模拟器 Users sergey Library Android sdk tools emulator avd Nexus 5 API 22 x86 netspeed full netdel
  • GUI 屏幕转换在 qml 中如何工作

    我是一名 C 开发人员 现在正在研究在 QtQuick 中使用 QML 进行 GUI 开发 在 GUI 创建过程中 用户只能看到一个屏幕 并根据用户交互来切换屏幕 但背后究竟发生了什么 有很多信息仅涉及如何设计单个屏幕 但有关如何管理其状态
  • 设置 1000 到 10.00 之间数字的格式

    我想将 1000 格式化为 10 00 PHP number format 函数似乎对此不起作用 我努力了 amount2 number format cost 2 echo cost 有任何想法吗 有没有办法可以操作 number for
  • C# 垃圾收集器交叉引用

    垃圾收集器是否会为交叉引用的对象 类释放资源 该对象 类不再从主程序中引用 例如 class class1 class2 m RefClass2 class class2 class1 m RefClass1 class class3 pu
  • 如何用Python实现看门狗定时器?

    我想用 Python 实现一个简单的看门狗定时器 有两个用例 看门狗确保函数的执行时间不会超过x seconds 看门狗确保某些定期执行的函数确实至少执行y seconds 我怎么做 只是发布我自己的解决方案 from threading
  • 从另一台机器访问 Mac OS X 上的 Jenkins

    我想从路由器和互联网后面到达詹金斯 非常简单的设置 互联网 gt 路由器 gt Mac gt Jenkins 已知项目 从路由器上 我可以看到机器的内部 IP 我将其称为 X X X X 然后是Jenkins中的Jenkins URL位置配
  • 无法删除对象“dbo.Table1”,因为它由 FOREIGN KEY 约束引用

    即使我正在删除并尝试删除表 我也会收到错误 ALTER TABLE dbo Table1 DROP CONSTRAINT FK Table1 Table2 GO DROP TABLE dbo Table1 GO Error 消息 3726
  • C# 小数舍入不一致吗?

    我一直在与来自 SQL Decimal 38 30 的 C 中的小数精度作斗争 最终我终于将其实现了四舍五入的奇怪效果 我知道我可能忽略了这里显而易见的事情 但我需要一点洞察力 我遇到的问题是 C 无法产生我认为一致的输出 decimal