C# 中的英尺到米转换器坏了?

我正在尝试制作一个简单的英尺到米转换器,但是发生了这种情况:


using System;

using System.Windows;

using System.Windows.Controls;


namespace CoolConversion

{

    /// <summary>

    /// Interaction logic for MainWindow.xaml

    /// </summary>

    public partial class MainWindow : Window

    {

        decimal feet;

        decimal meter;


        public MainWindow()

        {

            InitializeComponent();

        }


        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)

        {

            feet = Convert.ToDecimal(Feet.Text);

            meter = feet / 3.281;

        }

    }

}

这是我目前拥有的代码。起初,feet&meter是 int,但我无法将 int 除以 3.281。我将它们更改为小数,现在出现此错误:


错误 CS0019 运算符“/”不能应用于“十进制”和“双精度”类型的操作数


如果我不能将小数除以整数,并且如果我不能/在小数上使用符号,我应该如何除以小数?


小怪兽爱吃肉
浏览 157回答 2
2回答

LEATH

这里的问题是编译器认为你的常量3.281是 type&nbsp;double。如果您打算使用诸如decimal您必须附加m后缀的类型。同样,对于float类型,您必须附加f后缀。根据 MSDN:默认情况下,赋值运算符右侧的实数文字被视为double.float因此,要初始化float变量,请使用后缀for&nbsp;F,如下例所示:float x = 3.5F;double但是,如果您希望将整数视为double,请使用后缀dor&nbsp;D,例如:double x = 3D;decimal如果您希望将数字实数文字视为decimal,请使用后缀mor&nbsp;M,例如:decimal myMoney = 300.5m;我的建议在使用它之前,您应该真正确定您实际需要使用的类型。在将英尺转换为米的情况下,我会使用doubleor&nbsp;float;&nbsp;double通常是这种情况,因为它更精确。private double feet = 0.0d;private double meters = 0.0d;private void TextBox_TextChanged(object sender, TextChangedEventArgs e) {&nbsp; &nbsp; feet = Convert.ToDouble(Feet.Text);&nbsp; &nbsp; 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) {&nbsp; &nbsp; if (double.TryParse(Feet.Text, out feet))&nbsp; &nbsp; &nbsp; &nbsp; meters = feet / 3.281d;&nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; MessageBox.Show($"You've entered an invalid value: {Feet.Text}.");}

慕工程0101907

默认情况下,3.281它本身是一个双精度浮点数。您可以通过在数字末尾decimal添加 a 来使用 -literal 表示法m。meter = feet / 3.281m;为简洁起见,如果您曾经使用过声明为 a 的变量,则double在您需要在每个操作数中执行两种不同类型的计算时,您始终可以将其转换为小数。double feetToMeterValue = 3.281;meter = feet / (decimal)feetToMeterValue;这也适用于其他类型,但请注意,在转换为特定类型(即double>float和更明显decimal的int.
打开App,查看更多内容
随时随地看视频慕课网APP