This is a migrated thread and some comments may be shown as answers.

Using international currency and number formats

2 Answers 401 Views
Input
This is a migrated thread and some comments may be shown as answers.
David Penny
Top achievements
Rank 2
David Penny asked on 27 Nov 2009, 11:37 AM
Hi,

I don't think this is really a Telerik issue, but I thought someone here might be able to offer some advice.

I am using telerik input on some web pages, and then changing the International settings on my browser to Dutch (or anything other than English really).  This puts the euro symbol on the currency field as expected and is no problem.  However, the thousands separator then becomes a period (.) and the decimal separator a comma (,).  Again, exactly as expected.  My issue however is when I then take that field and add it to my database, it does not hold it in what I might term a standard decimal format.

For example, entered on the web page is €0,50 - I want this to be stored internally and in the database as 0.50 so that I can perform standard math functions on it, but it is getting stored as 5.00

All my web pages as set to culture="auto" and display the correct currency and number formatting when I change the International settings.

Is there any standard method I should be using to convert values in International currency format into a "standard" decimal format for math operations?

David Penny

2 Answers, 1 is accepted

Sort by
0
Johny
Top achievements
Rank 1
answered on 02 Dec 2009, 07:59 AM
Hello David,

I think that your finding is interesting and decided to try it on my side. However I was not able to reproduce the issue. I set my browser setting to Dutch and changed the culture of my page to "auto" and used the following code:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" %> 
 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
<head id="Head1" runat="server"
    <title></title
</head> 
<body> 
    <form id="form1" runat="server"
    <asp:ScriptManager ID="ScriptManager1" runat="server"
    </asp:ScriptManager> 
 
    <script type="text/javascript"
        function ClientClick() 
        { 
            document.getElementById("Text1").value = $find("<%=RadNumericTextBox1.ClientID %>").get_value(); 
        } 
     
    </script> 
 
    <telerik:RadNumericTextBox runat="server" ID="RadNumericTextBox1" Type="Currency"
    </telerik:RadNumericTextBox> 
    <asp:Button runat="server" ID="Button1" Text="Get value" OnClientClick="ClientClick();return false;" /> 
    <input type="text" id="Text1" /> 
    </form> 
</body> 
</html> 


After entering 0,50 on the numeric and moving the focus out of it I got the value correctly formatted to € 0,50. Clicking the button then fills the second input with the correct value - 0.50. So is there any other specific that I might be missing?

Regards,
Johny
 
0
David Penny
Top achievements
Rank 2
answered on 02 Dec 2009, 09:01 AM
Hi Johny,

Thanks for the response.  I had not tried obtaining the value using Javascript, but am using the returned value client side.

I have a radnumericinput defined as:
<telerik:RadNumericTextBox ID="numQuantity" runat="server" AutoPostBack="True">  
                            <NumberFormat AllowRounding="True" /> 
                        </telerik:RadNumericTextBox> 

I found that frequently telerik seems to pick up on my machine's international settings and often appends locale specific information, which I then make sure I look for and strip out.

Then, when writing this data to SQL I obtain the value:

Dim decAmount As Decimal = numAmount.Text  
'Also tried this as well...  
Dim decAmount As Decimal = Convert.ToDecimal(numAmount.Text)  
 

This is where it was returning the wrong information, so I wrapped all this in the following:

    Public Function ToDecimal(ByVal s As String) As Decimal  
        Dim cultureInfo As CultureInfo = cultureInfo.InvariantCulture  
        Dim r As Decimal = 0 
        Try  
            r = Convert.ToDecimal(s, cultureInfo.NumberFormat)  
        Catch ex As Exception  
            r = 0 
        End Try  
        Return r  
    End Function 

This now works as I want, so I have written this global function to do this for me whenever I am getting or setting a numeric decimal field on the page and all seems OK now (I use the reverse of the above to set the numeric value, although this generally seems to work OK anyway).

David Penny
Tags
Input
Asked by
David Penny
Top achievements
Rank 2
Answers by
Johny
Top achievements
Rank 1
David Penny
Top achievements
Rank 2
Share this question
or