How can I format decimal property to currency?
Properties can return anything they want to, but it's going to need to return the correct type.
private decimal _amount;
public string FormattedAmount
{
get { return string.Format("{0:C}", _amount); }
}
Question was asked... what if it was a nullable decimal.
private decimal? _amount;
public string FormattedAmount
{
get
{
return _amount == null ? "null" : string.Format("{0:C}", _amount.Value);
}
}
How to format decimals in a currency format?
I doubt it. The problem is that 100 is never 100 if it's a float, it's normally 99.9999999999 or 100.0000001 or something like that.
If you do want to format it that way, you have to define an epsilon, that is, a maximum distance from an integer number, and use integer formatting if the difference is smaller, and a float otherwise.
Something like this would do the trick:
public String formatDecimal(float number) {
float epsilon = 0.004f; // 4 tenths of a cent
if (Math.abs(Math.round(number) - number) < epsilon) {
return String.format("%10.0f", number); // sdb
} else {
return String.format("%10.2f", number); // dj_segfault
}
}
Format decimal value to currency with 2 decimal places
You are looking for "0:C2"
see Standard Numeric Format Strings
Precision specifier: Number of decimal digits
Sample:
String.Format("{0:C2}", 5d); //results in $5.00
String.Format("{0:C2}", 5.9d); //results in $5.90
String.Format("{0:C2}", 5.123d); //results in $5.12
How to format numbers as currency strings
Ok, based on what you said, I'm using this:
var DecimalSeparator = Number("1.2").toLocaleString().substr(1,1);
var AmountWithCommas = Amount.toLocaleString();
var arParts = String(AmountWithCommas).split(DecimalSeparator);
var intPart = arParts[0];
var decPart = (arParts.length > 1 ? arParts[1] : '');
decPart = (decPart + '00').substr(0,2);
return '£ ' + intPart + DecimalSeparator + decPart;
I'm open to improvement suggestions (I'd prefer not to include YUI just to do this :-) )
I already know I should be detecting the "." instead of just using it as the decimal separator...
Decimal return in currency format
I know two solutions to solve this problem.
One
Return strings:
string money = yourValue.ToString("0.00");
Two
Use Round
:
decimal money = Math.Round(yourValue, 2);
Parsed
It will always add .00
to integer values.
decimal money = decimal.Parse(yourvalue.ToString("0.00"));
How to format currency number to 2 decimal places, or none if no cents?
Since Java and Kotlin work hand in hand here is a Java Solution
One way of doing this would be to check if decimal number is similar to its int
or long
value
if (number == (int) number)
{
NumberFormat formatter = new DecimalFormat ("##");
System.out.println (formatter.format (number));
}
else
{
NumberFormat formatter = new DecimalFormat ("##.00");
System.out.println (formatter.format (number));
}
Format number with currency and two digits
You may utilize:
value.ToString("C2")
or following your code:
txtRe.Text += "Après " + i.ToString("C2")
or even:
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture))
Console.WriteLine(value.ToString("C2", CultureInfo.CreateSpecificCulture("fr")))
Related Topics
How to Use a Custom Font in Java
How to Show/Hide a Column at Runtime
Confusion: @Notnull VS. @Column(Nullable = False) with JPA and Hibernate
Java Type Inference: Reference Is Ambiguous in Java 8, But Not Java 7
How to Create a Linked List Data Structure in Java
Jaxb: How to Ignore Namespace During Unmarshalling Xml Document
Bypass Generatedvalue in Hibernate (Merge Data Not in Db)
Java Keylistener Not Registering Arrow Keys
Java Annotations Values Provided in Dynamic Manner
Warning - Build Path Specifies Execution Environment J2Se-1.4
What Makes Reference Comparison (==) Work for Some Strings in Java