gpt4 book ai didi

c# - 从十进制转换时,字符串包含尾随零

转载 作者:太空狗 更新时间:2023-10-30 01:18:53 25 4
gpt4 key购买 nike

我在编写的程序中遇到了一个不寻常的问题,我正试图找出是否有人知道原因。请注意,修复该问题非常简单。我只是不明白为什么会这样。

我有一个用 VB.NET 编写的 WinForms 程序,它显示数据的一个子集。它包含一些显示数值的标签(标签的 .Text 属性直接从 Decimal 值分配)。这些数字由我用 C# 编写的 DLL 返回。 DLL 调用最初返回相关值的网络服务。它以字符串形式返回一个,以小数形式返回另一个(我无法控制网络服务,我只是使用它)。 DLL 将这些分配给对象的属性(两者都是小数),然后将该对象返回给调用 DLL 的 WinForm 程序。显然,Web 服务正在消耗大量其他数据,但没有其他操作可以修改这些属性。

所以,简短的版本是:

  • WinForm 从 DLL 请求一个新的 Foo
  • 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 问题问的恰恰相反......如何从初始解析中保留格式)。

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

最佳答案

因为比例因子也是preserves any trailing zeros在十进制数中。尾随零不影响算术或比较运算中 Decimal 数的值。但是,如果应用了适当的格式字符串,ToString 方法可能会显示尾随零。

关于c# - 从十进制转换时,字符串包含尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25372014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com