2 回答

TA貢獻1936條經驗 獲得超7個贊
這里的問題是編譯器認為你的常量3.281
是 type double
。如果您打算使用諸如decimal
您必須附加m
后綴的類型。同樣,對于float
類型,您必須附加f
后綴。根據 MSDN:
默認情況下,賦值運算符右側的實數文字被視為
double
.
float
因此,要初始化
float
變量,請使用后綴f
orF
,如下例所示:float x = 3.5F;
double
但是,如果您希望將整數視為
double
,請使用后綴d
orD
,例如:double x = 3D;
decimal
如果您希望將數字實數文字視為
decimal
,請使用后綴m
orM
,例如:decimal myMoney = 300.5m;
我的建議
在使用它之前,您應該真正確定您實際需要使用的類型。在將英尺轉換為米的情況下,我會使用double
or float
; double
通常是這種情況,因為它更精確。
private double feet = 0.0d;
private double meters = 0.0d;
private void TextBox_TextChanged(object sender, TextChangedEventArgs e) {
feet = Convert.ToDouble(Feet.Text);
meters = feet / 3.281d;
}
該decimal類型通常用于保存貨幣值,其中double和float用于諸如此類的計算。此外,這不是必需的,但如果您曾經使用多種類似類型,例如float, double, decimal;的情況 使用每個后綴來清楚地傳達您打算使用的類型總是一個好主意。
最后說明
您可以decimal像其他人指出的那樣強制轉換,但是當您可以decimal通過使用指定時,這是不必要的強制轉換3.281m。在性能很重要的環境中,您應該盡可能避免不必要的強制轉換。
另一方面,在嘗試轉換之前,您應該確保嘗試轉換的文本是有效值。我更喜歡使用(如果我沒記錯的話TryParse,所有數字類型都應該有一個方法)。TryParse這背后的原因是,如果我123a以您的方法當前工作的方式輸入您的文本框,它會立即爆炸。解決這個問題非常簡單:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e) {
if (double.TryParse(Feet.Text, out feet))
meters = feet / 3.281d;
else
MessageBox.Show($"You've entered an invalid value: {Feet.Text}.");
}

TA貢獻1887條經驗 獲得超5個贊
默認情況下,3.281它本身是一個雙精度浮點數。您可以通過在數字末尾decimal添加 a 來使用 -literal 表示法m。
meter = feet / 3.281m;
為簡潔起見,如果您曾經使用過聲明為 a 的變量,則double在您需要在每個操作數中執行兩種不同類型的計算時,您始終可以將其轉換為小數。
double feetToMeterValue = 3.281;
meter = feet / (decimal)feetToMeterValue;
這也適用于其他類型,但請注意,在轉換為特定類型(即double>float和更明顯decimal的int.
- 2 回答
- 0 關注
- 143 瀏覽
添加回答
舉報