Question: Note: there is an [extensive discussion on converting a string into a decimal](https://salesforce.stackexchange.com/questions/318/what-is-a-concise-function-that-formats-a-string-decimal-into-a-currency-forma). This question asks how to convert a number into a formatted string.

Given a decimal variable, how can I convert that into a formatted string, such as a currency string, i.e. 2000 would become "$2,000.00"? I would have thought this would be an easy task, given the formatting options available in visualforce, e.g. `<apex:outputtext value="{0,number,$#,###.##}">`, but there doesn't seem to be analagous functionality for apex. Is there a simple method for achieve this?

I first looked at the `decimal.format()` method, but this doesn't take any parameters. Was hoping for something like this 

```
Decimal input = 2000;
String output = input.format('$#,###.##');

```

I also looked at the `String.format(formatString, inputArray)` but you can only use string data types for the input array. Was hoping for something like this

```
Decimal input = 2000;
String output = String.format('$#,###.##',new Object[] { input });

```

Answer: 
This should work, if its until 2 decimals:

```
Decimal dec;
String amount;
if (!string.valueof(dec.format()).right(3).contains('.')){
    amount = '$' + string.valueof(dec.format()) + '.00';
}else if (string.valueof(dec.format()).right(2).contains('.')){
    amount = '$' + string.valueof(dec.format()) + '0';
}else {
    amount = '$' + string.valueof(dec.format());
}

```
i created a class for Utility functions like this.

Here is the code in the Utility class

```
public static String formatMoney(String s) {
    s = '$' + s;
    if (!s.contains('.')) {
        s = s + '.00';
    } else {
      Integer dPos = s.indexOf('.');
      if (s.length() - dPos < 3) { s = s + '0'; }   
    }
    return s; 
}

```

Then in my apex class I create a string that will show on my VF Page and call the function

In this particular case the money is coming from a query

```
String poTotal {get;set;}

poTotal = Utilities.formatMoney(poInfo[0].PO_Amount__c.format());

```

I can call the Utility function from any apex class and it will format my Decimal value into the string with $1,123.00

But it can be done with anything

```
String myMoney {get;set;}

public void myFunction() {
  Decimal amt = 1234.1;
  myMoney = Utilities.formatMoney(amt.format());

```