function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion

Trigger Currency Conversion Display Wrong Decimal Places

We have an object called "Project", and a project has its own currency, for instance ARS 
There are 2 Number Fields that we use to get the conversion Rate between "Project Currency", EUR and $
Exchange USD - Number Field (10,8)
Exchange EUR - Number Field (10-8)
We have a Trigger, to get the conversion Rate. 
User-added image
And we have Set Currency Exchange to 6 Decimal Places
But on "Exchange USD" and "Exchange EUR", Number are rounded to 2 Decimals.
Does anyone know how to avoid the rounded decimal to 2?
We need to see 8 decimals, not rounded.
sandeep sankhlasandeep sankhla

Please share the code where you are converting or doing calculation using these 2 fields..

Hi Sandeep,
The code is the trigger you can see in the screenshot.
I copy and paste below

trigger trigger_Before_Proyecto on Proyecto__c (before insert,before update) {
    Proyecto__c proyecto = trigger.New[0];  
    CurrencyConversion conversor = new CurrencyConversion();
    proyecto.Cambio_EUR__c = conversor.convertCurrency('EUR',proyecto.CurrencyIsoCode,1);
    proyecto.Cambio_USD__c = conversor.convertCurrency('USD',proyecto.CurrencyIsoCode,1);       

It makes the calculation, but rounded to 2 decimals. And we need to see 8 decimal places.


Sourabh KhoslaSourabh Khosla
Hi Guys, 

I need a little help . I am almost there ... but need a little hand-holding.  Agenda is to ALWAYS display the value converted in EUR - does not matter what the record currency is. 

I am using this code below: 
trigger convertToEuro on CustomObject(before update) {

List<CurrencyType> currencyTypeList = [select id,IsoCode,ConversionRate from CurrencyType where isActive = true] ;

    Map<String , Decimal> isoWithRateMap = new Map<String, Decimal>();

    for(CurrencyType c : currencyTypeList) {

        isoWithRateMap.put(c.IsoCode , c.ConversionRate) ;



    for(CustomObject ce:{

        if(ce.CurrencyIsoCode != 'EUR' && isoWithRateMap.containsKey(ce.CurrencyIsoCode)){

            ce.Amount_Converted__c = ce.ffps_iv__Amount__c/ isoWithRateMap.get(ce.CurrencyIsoCode);



It is doing everything fine except the fact that the Amount_Converted__c field's values are displayed as USD (& EUR) but EUR seems like display only value - the USD is what the Amount_Converted__c field is holding. I want to use Amount_Converted__c  converted in EUR in my workflow but instead I am getting the USD value - how could I just get the EUR value? I don't really need the Record Currency type - I need my EUR currency to be used in my workflows/approvals. 

User-added image

Please help.