2014-12-02 58 views
1

我創建了一個包含幾個字段的結構。
在那個結構中,我有一個屬性,它調用一個方法,然後爲了記錄目的而創建一個字符串。
當我使用結構中的屬性時,我直接調用創建日誌字符串的實際方法時會得到不同的小數點值!
假設我有9990M,如果我使用的結構是9990.0000,當我調用該方法直接將打印9990.00爲什麼我會得到不同的小數點?

這是我的方法:

private static string CreateLog(
    long userId, decimal amount, 
    long transactionID, decimal totalCash) 
{ 


    Values = string.Format("{0}{1}{2}{3}", 
          amount, 
          userId, 
          transactionId, 
          totalCash); 
    return Values; 
} 

我的結構是這樣的:

public struct AccountStruct 
     { 
      public long USER_ID; 
      public decimal AMOUNT; 
      public long TRANSACTION_ID; 
      public decimal CURRENT_CASH; 
      string ValuesToBeLoged 
      { 
       get 
       { 
        return CreateLog(this); 
       } 
      } 

     } 

而且CreateLog看起來像這樣(調用前一種方法)

private static string CreateLog(AccountStruct accinfo) 
     { 
      return CreateLog( accinfo.USER_ID, 
           accinfo.AMOUNT, 
           accinfo.TRANSACTION_ID, 
           accinfo.CURRENT_CASH); 
     } 

這是爲什麼?這裏有什麼問題?

回答

1

可能某種內部規範化正在進行。如果您關心這些問題,則需要在ToString或String.Format方法中指定要使用的小數位數。

查找Decimal.ToString(字符串)爲您的選項。通常我使用「Nx」,其中x是小數位數。

+0

我用Fx代替Nx,因爲我不想要分隔符。再次感謝,但我想知道究竟是什麼造成了這樣的差異 – Breeze 2014-12-02 15:49:15

+0

在內部,您的十進制值可以存儲爲9990 x 10^0或999 x 10^1或99900 x 10^-1。您將不得不閱讀規範並檢查原始內存,以便準確確定何時將其從一個版本轉換爲另一個版本。 (或者它可能完全是其他的東西。) – 2014-12-02 17:10:14

+0

非常感謝,我會看看它 – Breeze 2014-12-03 02:20:31

相關問題