Jax*_*n98 5 c# decimal division
我正在尝试制作一个简单的英尺到仪表转换器,但发生了这种情况:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我目前拥有的代码。起初,feet&meter是整数,但我不能将整数除以 3.281。我将它们更改为小数,现在出现此错误:
错误 CS0019 运算符“/”不能应用于“decimal”和“double”类型的操作数
如果我不能用整数除以小数,如果我不能/在小数上使用符号,我应该如何除以小数?
这里的问题是编译器认为您的常量3.281是类型double。如果您打算使用诸如此类的类型,decimal则必须附加m后缀。同样,对于float类型,您必须附加f后缀。每 MSDN:
默认情况下,赋值运算符右侧的实数值文字被视为
double。
float因此,要初始化
float变量,请使用后缀forF,如下例所示:
float x = 3.5F;
double但是,如果您希望将整数视为
double,请使用后缀d或D,例如:
double x = 3D;
decimal如果您希望将数字实数文字视为
decimal,请使用后缀m或M,例如:
decimal myMoney = 300.5m;
在使用之前,您应该真正确定您实际需要使用哪种类型。在将英尺转换为米的情况下,我会使用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;
}
Run Code Online (Sandbox Code Playgroud)
该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}.");
}
Run Code Online (Sandbox Code Playgroud)