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

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;
        }
    }
}

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



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

最佳答案

这里的问题是编译器认为您的常量3.281double类型。如果您打算使用decimal之类的类型,则必须附加m后缀。同样,对于float类型,您必须附加f后缀。每个MSDN:



float



double



decimal



我的建议

在使用它之前,您应该真正确定实际上需要使用哪种类型。在将英尺转换为米的情况下,我将使用doublefloatdouble通常是这种情况,因为它更精确。

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类型通常用于保存货币值,其中doublefloat用于此类计算。另外,这不是必需条件,但是如果您要使用多种相似类型,例如floatdoubledecimal;最好使用每个后缀以清楚地传达您打算使用的类型。

最后说明

您可以像其他人指出的那样强制转换为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}.");
}

关于c# - C#中的米到米转换器的脚坏了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54219954/

10-10 08:33
查看更多