簡體   English   中英

從十進制轉換時,字符串包含尾隨零

[英]String contains trailing zeroes when converted from decimal

在我寫的一個程序中,我遇到了一個不尋常的怪癖,我試圖找出是否有人知道原因。 請注意, 解決問題很容易。 我只是無法弄清楚為什么它首先發生。

我有一個用VB.NET編寫的WinForms程序,它顯示了一個數據子集。 它包含一些顯示數值的標簽(標簽的.Text屬性直接從Decimal值分配)。 這些數字是由我在C#中編寫的DLL返回的。 DLL調用Web服務,該服務最初返回有問題的值。 它返回一個字符串,另一個返回十進制(我沒有對webservice的任何控制,我只是消耗它)。 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問題正好相反......如何保持格式化與初始解析)。

目前,我剛剛從解析的初始字符串中刪除了尾隨的零,這隱藏了怪癖。 但是,我很想知道為什么它首先發生。

這是因為縮放因子也保留了十進制數中的任何尾隨零 尾隨零不會影響算術或比較運算中的十進制數的值。 但是,如果應用了適當的格式字符串,ToString方法可能會顯示尾隨零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM