我有一個我從未見過的案例。.NET十進制格式根據來源不同而不同
在一種情況下,我們通過代碼分配一個十進制值,例如,值foo.DecimalField = 200M;
當我ToString()
這個沒有格式化或者文化,我得到的值"200"
在另一種情況下,當相同的字段是從的EntityFramework分配,調試器仍然表示,該領域的精確值200M
,但當ToString()
'它,它會產生"200.00"
我會得到,如果這是一個浮點問題,或者如果在調試器中有隱藏的小數。
但是由於我使用了一個固定點十進制類型,這怎麼可能? 沒有網絡服務器或任何可能影響文化或涉及的東西。
我錯過了什麼? 可以小數型運作方式,取決於它如何被初始化(我假設有一些讀者從EF獲取它時,內部是inits十進制)
也許你可以創建一個SSCCE –
'decimal'仍然是一個浮點類型,它只是十進制而不是二進制。 – dreamlax
當您對它們執行操作時,十進制數保持其精度,因此如果通過具有不同精度的計算得到了兩個數字,則這是預期的行爲。 –