2009-10-01 19 views
1

視覺工作室對我大吼,在數據庫中它是一個浮點數,而在我的課上,它是一個雙精度浮點數。爲什麼我不能指定它,爲什麼它認爲這是一個「雙」? ?雙倍之間有什麼區別?和一個雙爲什麼我不能隱式轉換它們?

線三條低於

Confirmation confirm = new Confirmation(); 

    confirm.order = theOrder; 

    confirm.totalPrice = theOrder.BillingAmount; 

這裏是確認DEF

public class Confirmation 
    { 
     public Order order; 

     public List<OrderItem> allProducts; 

     public double totalPrice; 
    } 

這裏是BillingAmount DEF從我覺得從的.dbml拖拉,droppy生成代碼...

[Column(Storage="_BillingAmount", DbType="Float")] 
     public System.Nullable<double> BillingAmount 
     { 
      get 
      { 
       return this._BillingAmount; 
      } 
      set 
      { 
       if ((this._BillingAmount != value)) 
       { 
        this.OnBillingAmountChanging(value); 
        this.SendPropertyChanging(); 
        this._BillingAmount = value; 
        this.SendPropertyChanged("BillingAmount"); 
        this.OnBillingAmountChanged(); 
       } 
      } 
     } 
+0

請給出代碼.. – 2009-10-01 01:45:17

+0

有代碼,我注意到可空的事情,然後我看到下面的帥哥評論,有沒有一種很好的方法來轉換,或者我應該使它成爲一個小數?在我的班級裏面? – BigOmega 2009-10-01 01:49:08

+0

檢查我編輯的答案... – 2009-10-01 01:56:24

回答

1

雙?是一個可以表示「未知」值的double的可空對象版本,也是一個明確的double。雙精度和浮點數之間的區別在於雙精度浮點數的精度和範圍是精度的兩倍。

所以,你應該能夠隱式地將任何float轉換爲double,但不能以其他方式轉換,就像你可以將任何短整數(-32,768到+32769)轉換成long(-2億到+2)十億),而不是相反。

編輯: 所以你也可以隱式地將double轉換爲可爲空的double(double?),但不能以其他方式(可能爲null)。

但是你仍然可以轉換一個可爲空的雙精度值明確地。如果它有一個確定的值,那麼你可以通過轉換它,或通過訪問double的「Value」屬性來轉換它?

double? nulbleDbl = 123.456; 
    double? nullDbl = null; 
    double x = nulbleDbl.Value; //works just fine 
    double y = nullDbl.Value; // fails with convert error or cast error 
    bool isOk = nullDbl.HasValue; // returns false 
+0

所以我應該使它在我的另一個對象中可爲空我想使用它還是有一個好的方法來轉換? – BigOmega 2009-10-01 01:48:06

+0

@Ryan,如果它是一個空值,並且ity有一個確定的值,那麼你可以通過強制轉換它,或者通過訪問double的「Value」屬性來明確地轉換它。 – 2009-10-01 01:50:17

2

double?Nullable<double>簡寫。這是完全不同的類型。我的回憶是你可以之間隱式轉換,但只在一個方向(從doubledouble?)。另一個方向沒有意義,因爲在double?爲空的情況下,不存在轉換。數據庫代碼使用可爲空的double的原因是,在數據庫中,該值可能爲NULL。

6

在db中,如果您的列可以爲空,則在C#中將其表示爲Nullable<double>。 double,作爲一個值類型,不能爲空......但從分貝來看,這是完全合法的。這就是爲什麼.Net有Nullable<T>類型。您可以通過執行以下任何

double d = nullableDouble ?? 0; 
double d = (nullableDouble.HasValue) ? nullableDouble.Value : 0; 

等其值賦給一個雙...

1

轉換的雙重方式?以雙是:

double? nullDouble = null; 
double normaDouble = nullDouble ?? 0; 
    // where 0 is the default value used if nullDouble is null 

這是一樣的:

normalDouble = (nullDouble.HasValue) ? nullDouble.Value : 0; 

或 normalDouble =(!nullDouble = NULL)? nullDouble.Value:0;

+0

omg ... that'??'這是做什麼的,如果是我認爲這是你讓我感到非常高興(並且感覺強大) – BigOmega 2009-10-01 02:27:39

+0

這是空合併操作符。這意味着「使用左側,除非它爲空,在這種情況下,使用右側」。類型強制規則有點複雜;如果您需要詳細信息,請參閱規範。 – 2009-10-01 05:31:12

0

您在數據庫中的列必須是允許空值,因爲雙重?已生成。所以如果它可以爲空,這意味着它可能沒有從你的程序中獲得一個值。所以也許你應該選擇雙?或者雙倍,但是要隨處處理(並且可能不允許數據庫中的空值)。

相關問題