【问题标题】:Calculator: exception with decimal numbers计算器:十进制数例外
【发布时间】:2014-03-22 15:05:56
【问题描述】:

它适用于整数的加法、减法、乘法和除法,但不适用于十进制数。 sum1 变量有问题,就像为它们分配小数时它们的格式错误一样。这是因为它们被声明为双重,但我不知道如何以不同的方式编写它。

double sum1 = 0;
    double sum2 = 0;
    bool plusButtonClicked = false;
    bool subButtonClicked = false;
    bool multButtonClicked = false;
    bool divButtonClicked = false;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
    {
        Regex regex = new Regex("[^0-9]+");
        e.Handled = regex.IsMatch(e.Text);
    }

    private void one_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += one.Content;
    }

    private void two_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += two.Content;
    }

    private void three_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += three.Content;
    }

    private void four_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += four.Content;
    }

    private void five_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += five.Content;
    }

    private void six_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += six.Content;
    }

    private void seven_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += seven.Content;
    }

    private void eight_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += eight.Content;
    }

    private void nine_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += nine.Content;
    }

    private void zero_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Text += zero.Content;
    }

    private void add_Click(object sender, RoutedEventArgs e)
    {
        sum1 += double.Parse(numEnt.Text);
        numEnt.Clear();

        plusButtonClicked = true;
        subButtonClicked = false;
        multButtonClicked = false;
        divButtonClicked = false;
    }

    private void sub_Click(object sender, RoutedEventArgs e)
    {
        sum1 += double.Parse(numEnt.Text);
        numEnt.Clear();

        plusButtonClicked = false;
        subButtonClicked = true;
        multButtonClicked = false;
        divButtonClicked = false;
    }

    private void mult_Click(object sender, RoutedEventArgs e)
    {
        sum1 += double.Parse(numEnt.Text);
        numEnt.Clear();

        plusButtonClicked = false;
        subButtonClicked = false;
        multButtonClicked = true;
        divButtonClicked = false;
    }

    private void div_Click(object sender, RoutedEventArgs e)
    {
        sum1 += double.Parse(numEnt.Text);
        numEnt.Clear();

        plusButtonClicked = false;
        subButtonClicked = false;
        multButtonClicked = false;
        divButtonClicked = true;
    }

    private void deci_Click(object sender, RoutedEventArgs e)
    {
        string currentInput = numEnt.Text;
        bool pointFound = false;

        for (int i = 0; i < currentInput.Length; i++)
        {
            if (currentInput[i] == '.')
                pointFound = true;

        }

        if (pointFound == false)
            numEnt.Text += ".";
    }

    private void equal_Click(object sender, RoutedEventArgs e)
    {
        if (plusButtonClicked == true)
        {
            sum2 = sum1 + double.Parse(numEnt.Text);
            result.Text = sum2.ToString();
            sum1 = 0;
        }

        if (subButtonClicked == true)
        {
            sum2 = sum1 - double.Parse(numEnt.Text);
            result.Text = sum2.ToString();
            sum1 = 0;
        }

        if (multButtonClicked == true)
        {
            sum2 = sum1 * double.Parse(numEnt.Text);
            result.Text = sum2.ToString();
            sum1 = 0;
        }

        if (divButtonClicked == true)
        {
            sum2 = sum1 / double.Parse(numEnt.Text);
            result.Text = sum2.ToString();
            sum1 = 0;
        }
    }

    private void clear_Click(object sender, RoutedEventArgs e)
    {
        numEnt.Clear();
        calculations.Clear();
        result.Clear();
    }




}

【问题讨论】:

  • 究竟是什么异常?在哪条线上? numEnt.Text 的值是多少?
  • 我真的看不懂这段代码。无论是加法、减法、乘法还是 div,您都将数字加到 sum1 中?
  • Sum1的类型是什么??如果它被声明为Integer,那么您将无法使用Decimal获得数字

标签: c# xaml decimal calculator


【解决方案1】:

首先将您的sum1 变量声明为double。还有一件事你需要一个for loop 来检查一个字符串是否有一个decimal point。相反,您可以使用 string.Contains 方法。试试这个代码希望它会有所帮助

double sum1 =0.0 ;
private void add_Click(object sender, RoutedEventArgs e)
{
    sum1 += double.Parse(numEnt.Text);
    numEnt.Clear();

    plusButtonClicked = true;
    subButtonClicked = false;
    multButtonClicked = false;
    divButtonClicked = false;
}

private void sub_Click(object sender, RoutedEventArgs e)
{
    sum1 -= double.Parse(numEnt.Text);
    numEnt.Clear();

    plusButtonClicked = false;
    subButtonClicked = true;
    multButtonClicked = false;
    divButtonClicked = false;
}

private void mult_Click(object sender, RoutedEventArgs e)
{
    sum1 *= double.Parse(numEnt.Text);
    numEnt.Clear();

    plusButtonClicked = false;
    subButtonClicked = false;
    multButtonClicked = true;
    divButtonClicked = false;
}

private void div_Click(object sender, RoutedEventArgs e)
{
    sum1 /= double.Parse(numEnt.Text);
    numEnt.Clear();

    plusButtonClicked = false;
    subButtonClicked = false;
    multButtonClicked = false;
    divButtonClicked = true;
}

private void deci_Click(object sender, RoutedEventArgs e)
{
    string currentInput = numEnt.Text;
    bool pointFound = false;

    //for (int i = 0; i < currentInput.Length; i++)
    //{
        if(currentInput.Contains("."))//if (currentInput[i] == '.')
            pointFound = true;

    //}

    if (pointFound == false)
        numEnt.Text += ".";
}

【讨论】:

    【解决方案2】:

    可能点不是您的小数分隔符。在这种情况下,您可以使用

     double.Parse(string, IFormatProvider) 
    

    设置你想要的小数点分隔符。

    试试这个

    var currentCulture = System.Globalization.CultureInfo.InstalledUICulture;
    var numberFormat = (System.Globalization.NumberFormatInfo) currentCultur .NumberFormat.Clone();
    numberFormat .NumberDecimalSeparator = "."; 
    

    sum1 += double.Parse(numEnt.Text, numberFormat);

    【讨论】:

    • 好的,我不知道如何在代码中实现它。我没有收到任何错误,但如果不是太麻烦,你能把它写在我的代码中并发布吗?
    猜你喜欢
    • 2019-04-29
    • 2019-09-22
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2019-04-16
    • 2022-10-13
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多