从十进制转换时字符串包含尾随零

2024-02-13

我在编写的程序中遇到了一个不寻常的怪癖,我试图找出是否有人知道原因。注意fixing这个问题很简单。我只是不明白为什么会发生这种情况。

我有一个用以下语言编写的 WinForms 程序VB.NET即显示数据的子集。它包含一些显示数值的标签(.Text标签的属性直接从十进制值分配)。这些数字由我编写的 DLL 返回C#。 DLL 调用一个 Web 服务,该服务最初返回有问题的值。它返回一个作为字符串,另一个作为十进制(我对网络服务没有任何控制权,我只是使用它)。 DLL 将这些属性分配给对象的属性(均为小数),然后将该对象返回给调用该 DLL 的 WinForm 程序。显然,Web 服务还消耗了许多其他数据,但没有发生可以修改这些属性的其他操作。

所以,简短的版本是:

  • WinForm 请求一个新的Foo来自 DLL。
  • DLL创建对象Foo.
  • DLL调用webservice,返回SomeOtherFoo.

    //Both Foo.Bar1 and Foo.Bar2 are decimals
    Foo.Bar1 = decimal.Parse(SomeOtherFoo.Bar1); //SomeOtherFoo.Bar1 is a string equal to "2.9000"
    Foo.Bar2 = SomeOtherFoo.Bar2; //SomeOtherFoo.Bar2 is a decimal equal to 2.9D
    
  • DLL 将 Foo 返回给 WinForm。

    WinForm.lblMockLabelName1.Text = Foo.Bar1 //Inspecting Foo.Bar1 indicates my value is 2.9D
    WinForm.lblMockLabelName2.Text = Foo.Bar2 //Inspecting Foo.Bar2 also indicates I'm 2.9D
    

那么,有什么怪癖呢?

WinForm.lblMockLabelName1.Text 显示为"2.9000",而 WinForm.lblMockLabelname2.Text 显示为"2.9".

现在,我对 C# 和 VB 的了解都表明,最初解析为十进制的字符串格式不应影响稍后对同一十进制调用的decimal.ToString() 操作的结果。我希望decimal.Parse(someDecimalString).ToString()将返回没有任何尾随零的字符串。我在网上找到的所有内容似乎都证实了这一点(有无数的 Stack Overflow 问题提出了完全相反的问题……如何在初始解析时保持格式)。

目前,我刚刚从解析的初始字符串中删除了尾随零,这隐藏了这个怪癖。但是,我很想知道为什么会发生这种情况。


这是因为缩放因子也保留所有尾随零 http://msdn.microsoft.com/en-us/library/system.decimal.aspx以十进制数表示。尾随零不会影响算术或比较运算中十进制数的值。但是,如果应用适当的格式字符串,ToString 方法可能会显示尾随零。

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

从十进制转换时字符串包含尾随零 的相关文章

  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • std::bind 重载解析

    下面的代码工作正常 include
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 如何打开 Windows 资源管理器窗口并选择特定文件夹

    我有一个 winform 应用程序 这个 winform 应用程序创建了几个文件 我想在我的应用程序中实现 查找目标 功能来显示这些文件 这些文件位于同一文件夹中 看图片 假设我创建了几个文件 C Test 文件夹 该文件夹包含以下文件 C
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • HTML 属性 bgcolor 已弃用:用什么代替?

    VStudio ASP NET 给出以下消息 Attribute bgcolor is considered outdated A newer construct is recommended 推荐的结构是什么 bgcolor是在一个 td
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • 使用 JQuery 根据下拉列表选择的值显示/隐藏控件

    我正在尝试使用 JQuery 根据下拉菜单的选定索引显示 隐藏 div 标签 但它不起作用 任何帮助将不胜感激 Thanks
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐