为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
小怪兽爱吃肉 2022-07-23 17:36:48
我正在尝试制作一个简单的英尺到米转换器,但是发生了这种情况: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 运算符“/”不能应用于“十进制”和“双精度”类型的操作数如果我不能将小数除以整数,并且如果我不能/在小数上使用符号,我应该如何除以小数?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

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

默认情况下,赋值运算符右侧的实数文字被视为double.


float

因此,要初始化float变量,请使用后缀for F,如下例所示:
float x = 3.5F;


double

但是,如果您希望将整数视为double,请使用后缀dor D,例如:
double x = 3D;


decimal

如果您希望将数字实数文字视为decimal,请使用后缀mor M,例如:
decimal myMoney = 300.5m;


我的建议

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

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}.");

}


查看完整回答
反对 回复 2022-07-23
?
慕工程0101907

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.


查看完整回答
反对 回复 2022-07-23
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信