c# Replace dot with comma while input in WPF DataGrid

A A 61 Reputation points
2021-03-18T08:28:52.037+00:00

Hey,

I am doing a simple calculator as an exercise and I am quite new in c#.

How to change all dot to comma? E.g. 21.22 but I need it always to be like 21,22
Code XALM:

<Window x:Class="Calculator.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Calculator"
        mc:Ignorable="d"
        Title="MainWindow" Height="500" Width="300">
    <Grid Margin="8">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="1.5*"/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Label x:Name="result" Content="0" Grid.ColumnSpan="4" HorizontalAlignment="Right" 
               VerticalAlignment="Bottom" FontSize="50"/>
        <Button Content="AC" Margin="2" Grid.Column="0" Grid.Row="1"
                FontWeight="bold" Click="OperationButton_Click"/>
        <Button Content="+/-" Margin="2" Grid.Column="1" Grid.Row="1"
                FontWeight="bold" Click="OperationButton_Click"/>
        <Button Content="%" Margin="2" Grid.Column="2" Grid.Row="1"
                FontWeight="bold" Click="OperationButton_Click"/>
        <Button Content="÷" Margin="2" Grid.Column="3" Grid.Row="1"
                FontWeight="bold" Click="OperationButton_Click"/>

        <Button Content="7" Margin="2" Grid.Column="0" Grid.Row="2"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="8" Margin="2" Grid.Column="1" Grid.Row="2"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="9" Margin="2" Grid.Column="2" Grid.Row="2"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="×" Margin="2" Grid.Column="3" Grid.Row="2"
                FontWeight="bold" Click="OperationButton_Click"/>

        <Button Content="4" Margin="2" Grid.Column="0" Grid.Row="3"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="5" Margin="2" Grid.Column="1" Grid.Row="3"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="6" Margin="2" Grid.Column="2" Grid.Row="3"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="-" Margin="2" Grid.Column="3" Grid.Row="3"
                FontWeight="bold" Click="OperationButton_Click"/>

        <Button Content="1" Margin="2" Grid.Column="0" Grid.Row="4"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="2" Margin="2" Grid.Column="1" Grid.Row="4"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="3" Margin="2" Grid.Column="2" Grid.Row="4"
                FontSize="20" Click="NumberButton_Click"/>
        <Button Content="+" Margin="2" Grid.Column="3" Grid.Row="4"
                FontWeight="bold" Click="OperationButton_Click"/>

        <Button Content="0" Margin="2" Grid.Column="0" Grid.Row="5" 
                FontSize="20" Grid.ColumnSpan="2" Click="NumberButton_Click"/>
        <Button x:Name="dec" Content="" Margin="2" Grid.Column="2" Grid.Row="5"
                FontWeight="bold" Click="OperationButton_Click"/>
        <Button Content="=" Margin="2" Grid.Column="3" Grid.Row="5"
                FontWeight="bold" Click="OperationButton_Click"/>
    </Grid>
</Window>

Code C#:

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;

namespace Calculator
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        double firstNumber, secondNumber, resultNumber = 0;
        bool calcDone = false;
        Operations operation = Operations.None;
        string separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;

        public MainWindow()
        {
            InitializeComponent();

            //Assign to the decimal button the separator from the current culture
            dec.Content = separator;
        }

        //List the possible numeric operations
        private enum Operations
        {
            None,
            Division,
            Multiplication,
            Subtraction,
            Sum
        }

        //Manage number buttons input
        private void NumberButton_Click(object sender, RoutedEventArgs e)
        {
            Button button = (Button)sender;

            if (calcDone) //calculation already done
            {
                result.Content = $"{button.Content}";
                calcDone = false;
            }
            else //calculation not yet done
            {
                if (result.Content.ToString() == "0")
                {
                    result.Content = $"{button.Content}";
                }
                else
                {
                    result.Content = $"{result.Content}{button.Content}";
                }
            }

        }

        //Manage operation buttons input
        private void OperationButton_Click(object sender, RoutedEventArgs e)
        {
            Button button = (Button)sender;

            //Evaluate button pressed
            switch (button.Content.ToString())
            {
                case "AC":
                    result.Content = "0";
                    break;
                case "+/-":
                    if (!(result.Content.ToString() == "0"))
                    {
                        result.Content = Convert.ToDouble(result.Content) * -1;
                    }
                    break;
                case "%":
                    if (!(result.Content.ToString() == "0"))
                    {
                        result.Content = Convert.ToDouble(result.Content) / 100;
                    }
                    break;
                case "÷":
                    firstNumber = Convert.ToDouble(result.Content);
                    operation = Operations.Division;
                    result.Content = "0";
                    break;
                case "×":
                    firstNumber = Convert.ToDouble(result.Content);
                    operation = Operations.Multiplication;
                    result.Content = "0";
                    break;
                case "-":
                    firstNumber = Convert.ToDouble(result.Content);
                    operation = Operations.Subtraction;
                    result.Content = "0";
                    break;
                case "+":
                    firstNumber = Convert.ToDouble(result.Content);
                    operation = Operations.Sum;
                    result.Content = "0";
                    break;
                case "=":
                    switch (operation)
                    {
                        case Operations.Division:
                            if (calcDone)
                            {
                                if (!(result.Content.ToString() == "ERROR"))
                                {
                                    result.Content = Convert.ToDouble(result.Content) / secondNumber;
                                }
                            }
                            else
                            {
                                //Check if division by 0
                                if (result.Content.ToString() == "0")
                                {
                                    result.Content = "ERROR";
                                    calcDone = true;
                                }
                                else
                                {
                                    secondNumber = Convert.ToDouble(result.Content);
                                    resultNumber = firstNumber / secondNumber;
                                    result.Content = resultNumber;
                                    calcDone = true;
                                }
                            }
                            break;
                        case Operations.Multiplication:
                            if (calcDone)
                            {
                                result.Content = Convert.ToDouble(result.Content) * secondNumber;
                            }
                            else
                            {
                                secondNumber = Convert.ToDouble(result.Content);
                                resultNumber = firstNumber * secondNumber;
                                result.Content = resultNumber;
                                calcDone = true;
                            }
                            break;
                        case Operations.Subtraction:
                            if (calcDone)
                            {
                                result.Content = Convert.ToDouble(result.Content) - secondNumber;
                            }
                            else
                            {
                                secondNumber = Convert.ToDouble(result.Content);
                                resultNumber = firstNumber - secondNumber;
                                result.Content = resultNumber;
                                calcDone = true;
                            }
                            break;
                        case Operations.Sum:
                            if (calcDone)
                            {
                                result.Content = Convert.ToDouble(result.Content) + secondNumber;
                            }
                            else
                            {
                                secondNumber = Convert.ToDouble(result.Content);
                                MessageBox.Show($"{firstNumber} + {secondNumber}");
                                resultNumber = firstNumber + secondNumber;
                                result.Content = resultNumber;
                                calcDone = true;
                            }
                            break;
                    }
                    break;
                default:
                    if (!result.Content.ToString().Contains(separator))
                    {
                        result.Content = $"{result.Content}{button.Content}";
                    }
                    break;
            }
Windows Presentation Foundation
Windows Presentation Foundation
A part of the .NET Framework that provides a unified programming model for building line-of-business desktop applications on Windows.
2,670 questions
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,229 questions
{count} votes

Accepted answer
  1. DaisyTian-1203 11,616 Reputation points
    2021-03-22T07:25:42.23+00:00

    I updated the result as below:

    <Label x:Name="result" Content="0" Grid.ColumnSpan="4" HorizontalAlignment="Right" Language="es-ES" VerticalAlignment="Bottom" FontSize="50"/>  
    

    And Updated separator and OperationButton_Click like:

    string separator = CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator;  
    
    .......  
     private void OperationButton_Click(object sender, RoutedEventArgs e)  
            {  
                Button button = (Button)sender;  
      
                //Evaluate button pressed  
                switch (button.Content.ToString())  
                {  
                    case "AC":  
                        result.Content = "0";  
                        break;  
                    case "+/-":  
                        if (!(result.Content.ToString() == "0"))  
                        {  
                            result.Content = Convert.ToDouble((result.Content).ToString().Replace(separator, ".")) * -1;  
                        }  
                        break;  
                    case "%":  
                        if (!(result.Content.ToString() == "0"))  
                        {  
                            result.Content = Convert.ToDouble((result.Content).ToString().Replace(separator, ".")) / 100;  
                        }  
                        break;  
                    case "÷":  
                        firstNumber = Convert.ToDouble((result.Content).ToString().Replace(separator, "."));  
                        operation = Operations.Division;  
                        result.Content = "0";  
                        break;  
                    case "×":  
                        firstNumber = Convert.ToDouble((result.Content).ToString().Replace(separator, "."));  
                        operation = Operations.Multiplication;  
                        result.Content = "0";  
                        break;  
                    case "-":  
                        firstNumber = Convert.ToDouble((result.Content).ToString().Replace(separator, "."));  
                        operation = Operations.Subtraction;  
                        result.Content = "0";  
                        break;  
                    case "+":  
                        firstNumber = Convert.ToDouble((result.Content).ToString().Replace(separator, "."));  
                        operation = Operations.Sum;  
                        result.Content = "0";  
                        break;  
                    case "=":  
                        switch (operation)  
                        {  
                            case Operations.Division:  
                                if (calcDone)  
                                {  
                                    if (!(result.Content.ToString() == "ERROR"))  
                                    {  
                                        result.Content = Convert.ToDouble((result.Content).ToString().Replace(separator,".") )/ secondNumber;  
                                    }  
                                }  
                                else  
                                {  
                                    //Check if division by 0  
                                    if (result.Content.ToString() == "0")  
                                    {  
                                        result.Content = "ERROR";  
                                        calcDone = true;  
                                    }  
                                    else  
                                    {  
                                        secondNumber = Convert.ToDouble((result.Content).ToString().Replace(separator, "."));  
                                        resultNumber = firstNumber / secondNumber;  
                                        result.Content = resultNumber;  
                                        calcDone = true;  
                                    }  
                                }  
                                break;  
                            case Operations.Multiplication:  
                                if (calcDone)  
                                {  
                                    result.Content = Convert.ToDouble((result.Content).ToString().Replace(separator, ".")) * secondNumber;  
                                }  
                                else  
                                {  
                                    secondNumber = Convert.ToDouble((result.Content).ToString().Replace(separator, "."));  
                                    resultNumber = firstNumber * secondNumber;  
                                    result.Content = resultNumber;  
                                    calcDone = true;  
                                }  
                                break;  
                            case Operations.Subtraction:  
                                if (calcDone)  
                                {  
                                    result.Content = Convert.ToDouble((result.Content).ToString().Replace(separator, ".")) - secondNumber;  
                                }  
                                else  
                                {  
                                    secondNumber = Convert.ToDouble((result.Content).ToString().Replace(separator, "."));  
                                    resultNumber = firstNumber - secondNumber;  
                                    result.Content = resultNumber;  
                                    calcDone = true;  
                                }  
                                break;  
                            case Operations.Sum:  
                                if (calcDone)  
                                {  
                                    result.Content = Convert.ToDouble((result.Content).ToString().Replace(separator, ".")) + secondNumber;  
                                }  
                                else  
                                {  
                                    secondNumber = Convert.ToDouble((result.Content).ToString().Replace(separator, "."));  
                                    //MessageBox.Show($"{firstNumber} + {secondNumber}");  
                                    resultNumber = firstNumber + secondNumber;  
                                    result.Content = resultNumber;  
                                    calcDone = true;  
                                }  
                                break;  
                        }  
                        break;  
                    default:  
                        if (!result.Content.ToString().Contains(separator))  
                        {  
                            result.Content = $"{result.Content}{button.Content}";  
                        }  
                        break;  
                }  
    

    Result picture is:
    80009-2.gif


    If the response is helpful, please click "Accept Answer" and upvote it.
    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


2 additional answers

Sort by: Most helpful
  1. Karen Payne MVP 35,036 Reputation points
    2021-03-18T10:33:44.513+00:00

    Hello,

    You can format via using a different culture and format. In this code sample I hard-coded the value.

    result.Content = string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:0.0}", 114.3);
    
    0 comments No comments

  2. Viorel 112.1K Reputation points
    2021-03-18T11:39:20.313+00:00

    If you want to change the format of the label using some specific language, such as Spanish, for example, then try adding the Language attribute:

    <Label x:Name="result" Content="0" Language="es-ES" … />

    This will use comma as decimal separator.

    It is also possible to set the language for the whole <Window> or application.