从 .NET Framework 4.7.2 移植到 .NET5.0 后如何避免“-0”作为 double.ToString() 结果?

2023-11-25

我正在将 .NET Framework 4.7.2 Visual Studio 项目移植到 .NET5.0,当值为负且接近于零时,我遇到了 double.ToString 的不同行为。

例如,双精度值 -7.1054273576010019E-15 在转换为字符串时会返回“-0”,即使我在转换之前对其进行舍入,而使用 .NET Framework 4.7.2 时,其结果为“0”(相同的代码)。

此处讨论了这种差异https://devblogs.microsoft.com/dotnet/floating-point-parsing-and-formatting-improvements-in-net-core-3-0/但我不太同意这是标题所述的改进,我认为 0 不应该有符号,它既不是正数也不是负数。

我知道我可以创建自定义 IFormatProvider 或扩展方法并根据需要转换双精度值,但这需要对代码中的每次转换进行更改,并且从事该项目的任何开发人员将来都需要使用它。在我看来,这个解决方案不是很直观,而且很可能是错误的根源。

有没有办法以更少的努力恢复以前的行为? Microsoft 愿意在未来版本的.NET 中改变这一点吗?

编辑: 我在这里的讨论中问了同样的事情https://github.com/dotnet/runtime/discussions/54537如果它对其他人有帮助的话。


从链接的帖子来看,所做的更改似乎是为了更符合 IEEE 754,这是所有语言都试图遵守的行为,以最大程度地减少混乱 - 或者至少标准化特定形式的混乱。

如果这些更改变得过于向后不兼容并大量破坏人们的程序,那么他们总是有可能会恢复这些更改,但如果此时还没有完成(它已经在 .NET Core 3.1 中,这是一个 LTS 版本,并且在.NET 5中)我认为不会。但在这里问“微软是否愿意改变这一点”是错误的地方 -在 dotnet/runtime 中提出问题并直接询问微软。

解决方法需要无处不在,但也很简单:替换确切的字符串将“-0”替换为“0”(例如,替换子字符串“-0”可能会导致 -0.5 的符号反转)。

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

从 .NET Framework 4.7.2 移植到 .NET5.0 后如何避免“-0”作为 double.ToString() 结果? 的相关文章

随机推荐

  • 了解 Python Pickle 不安全性

    Python 文档中指出pickle不安全 不应解析不受信任的用户输入 如果你研究这个 几乎所有的例子都证明了这一点system 通过呼叫os system 我不清楚的是如何os system没有被正确解释os正在导入模块 gt gt gt
  • 如何获取 win32 API 中所有屏幕的尺寸(RECT)?

    我正在为测试团队编写一份应用程序 该应用程序的作用是让您截取屏幕任何部分的屏幕截图 然后将其连同注释一起上传到测试团队服务器 截屏涉及选择屏幕上要截屏的区域 为此 我创建了一个半透明窗口并将其覆盖在整个屏幕上 我目前正在使用GetDeskt
  • 在 Google 地图上放置图钉

    我需要将用户重定向到 Google 地图页面并在定义的位置上放置一些图钉 问题是您可以通过简单的请求轻松地将地图集中在某个点上 但是对于这样的要求如何设置pin呢 您可以使用 我的地图 来执行此操作 创建或打开地图 单击编辑进入编辑模式 单
  • 获取作为给定项目实例的所有维基数据项目

    维基数据有一个项目叫做智能手机型号 我想获取它的所有实例 问题 如何使用实时服务器以编程方式获取实例的标识符 最好不包括出现在 WhatLinksHere 但位于 Wikidata 命名空间而不是主命名空间中的误报 您的问题指定了 Medi
  • 在 JavaScript 中获取下周的某一天的日期

    根据今天的日期 new Date 我想在 javascript 中获取下周四晚上 7 点的日期 例如 如果今天的日期是 Mon Apr 24 2017 13 00 00 GMT 我正在寻找结果 Thu Apr 27 2017 19 00 0
  • 隐藏 Samsung Galaxy 设备上的“不支持 NFC 标签类型”错误

    我正在开发一款仅扫描 MIFARE Classic 卡的 UID 的应用程序 以方便考勤登记 我已经让它工作了 然而 每次我在 Galaxy S4 上扫描卡时 都会收到一条提示 不支持 NFC 标签类型 我想在应用程序打开时阻止或隐藏该消息
  • python - 从浮点数中删除所有小数

    如何从浮点数中删除所有小数位 a 100 0 我希望它变成 100 I tried str a rstrip 0 但它刚刚返回1 将其转换为怎么样int gt gt gt int a 100 为了完整起见 有很多方法可以从十进制数的字符串表
  • gdb 终止于信号?,未知信号

    我只是尝试在 Mac OSX 版本 10 12 上使用 gdb 调试代码 但在 gdb 中启动程序时总是遇到此未知错误 我在安装后对 gdb 进行了代码签名 并使用 g 标志编译了我的代码 这就是正在发生的事情 computer hello
  • 如何使用 refs 访问/覆盖元素的 className?

    我有一个文本和一个按钮 我想要实现的是这样的 如果我单击按钮 文本将被隐藏 我想在不使用的情况下实现这一目标state class Test extends Component constructor props codes hide gt
  • app.config 中的用户范围与应用程序范围

    app config 中的用户范围和应用程序范围有什么区别 用户范围设置用于存储特定于每个用户的值 而应用程序范围设置用于所有用户 看看这个article
  • 列表 SwiftUI 中的每行是否可以有多个 NavigationLink?

    我无法在列表的同一行中使用多个 NavigationLink 看起来导航堆栈完全混乱了 因为你点击一次 它就会进入多个视图并不稳定地返回 在 TestList 中 我尝试在部分中添加单独的 NavigationLinks 并且尝试将 Nav
  • 网络浏览器键盘快捷键

    我有一个显示一些 HTML 的 WebBrowser 控件 我希望用户能够复制整个文档 但不能执行任何其他操作 我已经设置了IsWebBrowserContextMenuEnabled and WebBrowserShortcutsEnab
  • 如何将 PKCS7_sign 结果转换为 char * 或 std::string

    我尝试编写一个小邮件过滤器来使用 S MIME 签署邮件 到目前为止 我已经完成了签署邮件的代码 我使用 openssl 中的 demos smime 代码示例来完成这项工作 不幸的是 这些示例演示了如何将输入消息写入输出文件 但我需要结果
  • SparklyR 从 Spark 上下文中删除表

    想要从 Spark 上下文 sc 中删除单个数据表 我知道单个缓存表可以取消缓存 但这与从 sc 中删除对象不同 据我所知 library sparklyr library dplyr library titanic library Lah
  • 如何使用 PhantomJS 获取网站的 HTML 源代码

    下面是 PhantomJS 的示例 它通过 DOM id 从外部网页获取一些元素 var page require webpage create console log The default user agent is page sett
  • 如何在 NestedScrollView 中使用 ViewPager 和 RecyclerView 进行工作

    我正在将 NestedScrollView 与 ViewPager 一起使用 NestedScrollView 内部有一个 LinearLayout 最后有一些 TextView TabLayout 和 ViewPager TextView
  • 有没有办法在不重新启动 Solr 服务器的情况下动态更新同义词文件?

    众所周知 有一个同义词 txtconf 目录中的文件 每当我发现一些新的同义 词时我就想更新它 那么有什么方法可以动态更新该文件而不需要重新启动Solr服务器我的搜索结果会考虑新的同义词吗 如果有人有任何想法 请帮助我 提前致谢 我认为你可
  • _mm_crc32_u64 定义不明确

    为什么世界上有 mm crc32 u64 像这样定义 unsigned int64 mm crc32 u64 unsigned int64 crc unsigned int64 v crc32 指令always累积 32 位 CRC nev
  • 如何为我的班级提供定制演员支持?

    如何为将我的类转换为其他类型提供支持 例如 如果我有自己的管理实现byte 我想让人们把我的班级投射到byte 它只会返回私人成员 我该怎么做 让他们也将其转换为字符串是常见的做法 还是我应该覆盖ToString 或两者 您需要使用以下任一
  • 从 .NET Framework 4.7.2 移植到 .NET5.0 后如何避免“-0”作为 double.ToString() 结果?

    我正在将 NET Framework 4 7 2 Visual Studio 项目移植到 NET5 0 当值为负且接近于零时 我遇到了 double ToString 的不同行为 例如 双精度值 7 1054273576010019E 15