我正在尝试制作一个简单的英尺到米转换器,但是会发生这种情况:
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。我将它们更改为小数,现在出现此错误:如果我不能将小数除以整数,并且不能在小数上使用
/
符号,那我应该如何除以小数呢? 最佳答案
这里的问题是编译器认为您的常量3.281
是double
类型。如果您打算使用decimal
之类的类型,则必须附加m
后缀。同样,对于float
类型,您必须附加f
后缀。每个MSDN:
float
double
decimal
我的建议
在使用它之前,您应该真正确定实际上需要使用哪种类型。在将英尺转换为米的情况下,我将使用double
或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}.");
}
关于c# - C#中的米到米转换器的脚坏了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54219954/