I have a currency field in object. I am assigning value to it in apex

For US users: the currency format is 241,500.00 so when i apply decimalof on this i am getting 241500000.00.

But for Eur users: the currency format is 241.500.00000, so when i apply decimalof on this i am getting Invalid decimal: 241.500.00000

String s = 241.500.00000 or 241,500.00 ; 
mar.flowvalue__c = decimal.valueOf(s);

Could you please help me to resolve this issue


2 Answers 2


Unfortunately while the Decimal class has a format method:

Returns the String value of this Decimal using the locale of the context user.

there is no equivalent parse method that respects the user's locale.

The approach that side-steps the problem is to use things like <apex:inputField/> that does respect the locale in the string conversion and stores a Decimal value after the parsing rather than a String. Otherwise you will have to write your own locale aware parse method.


Decimal.valueOf isn't locale-aware. Consider binding to a Decimal directly on the page, as this automatically handles conversion to/from the user's locale for you:

<apex:input type="number" value="{!mar.flowvalue__c}" />


<apex:inputText value="{!mar.flowvalue__c}" />


<apex:inputField value="{!mar.flowvalue__c}" />

Any of the above methods will be locale aware and do the appropriate conversion for you.

If you want to assign a known value in your code, use a literal decimal value:

mar.flowvalue__c = 241500.00;

Even if you don't want to bind directly to the field, you can still use a Decimal value:

public Decimal flowValue { get; set; }

<apex:input type="number" value="{!flowValue}" />


<apex:inputText value="{!flowValue}" />

Basically, the point is, bind to a Decimal value, and you'll automatically get the benefits of locale-aware Decimal parsing.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .