-3

I'm developing an app in C# in Visual Studio and when the button is pressed calculations aren't correct. Let me explain when numbers are 5 5 5 result is 70 but when numbers are 5.0 5.0 5 the result is 475. It calculates numbers like they aren't decimals. If someone could help me that would be great. Thanks!

private void sum_Click(object sender, RoutedEventArgs e)
{
    double n1;
    double n2;
    double n3;


    if (double.TryParse(num1.Text.Replace(".", ","), out n1)
        && double.TryParse(num2.Text.Replace(".", ","), out n2)
        && double.TryParse(num3.Text.Replace(".", ","), out n3))
    {
        double sum = n1 * 4 + n2 * 5 + n3 * 5;
        String m = Convert.ToString(sum);
        sum1.Text = m;
    }
    else
    {
        sum1.Text = "Unesi sve!";
    }
}
Arturo Menchaca
  • 15,783
  • 1
  • 29
  • 53
F. Pajic
  • 41
  • 6

2 Answers2

1

You're changing . by ,. Surely the , is NumberGroupSeparator in your current CultureInfo. Therefore 5,0 will be parsed as 50:

50 * 4 + 50 * 5 + 5 * 5 == 475

Just dont replace . and your code will be fine:

if (double.TryParse(num1.Text, out n1) &&
    double.TryParse(num2.Text, out n2) &&
    double.TryParse(num3.Text, out n3)) ...

If you want use , as decimal separator:

var culture = CultureInfo.CurrentCulture.Clone() as CultureInfo;
culture.NumberFormat.NumberDecimalSeparator = ",";


if (double.TryParse(num1.Text, NumberStyles.Float, culture, out n1) &&
    double.TryParse(num2.Text, NumberStyles.Float, culture, out n2) &&
    double.TryParse(num3.Text, NumberStyles.Float, culture, out n3)) ...
Arturo Menchaca
  • 15,783
  • 1
  • 29
  • 53
0

That should work just fine double.TryParse() handles commas and full stops:

private void sum_Click(object sender, RoutedEventArgs e)
{
    double n1;
    double n2;
    double n3;


    if (double.TryParse(num1.Text, out n1)
        && double.TryParse(num2.Text, out n2)
        && double.TryParse(num3.Text, out n3))
    {
        double sum = n1 * 4 + n2 * 5 + n3 * 5;
        sum1.Text = sum.ToString();
    }
    else
    {
        sum1.Text = "Unesi sve!";
    }
}

Update

Here's a small example that uses strings as input instead of textboxes

Chief Wiggum
  • 2,784
  • 2
  • 31
  • 44