2 回答
TA贡献1936条经验 获得超6个赞
这里的问题是编译器认为你的常量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 关注
- 131 浏览
添加回答
举报