C# Decimal Formatting Query

2020-03-29 03:00发布

问题:

I am trying to format a decimal so that it will get displayed as so:

14.5 should get displayed as "14.50" 14.50 should get displayed as "14.50" 14.05 should get displayed as "14.05" 14.00 should get displayed as "14"

Is the possible with a single String Format, i.e. not using conditional formatting?

I've tried "0.##" (doesn't satisfy the first example) and "0.00" (doesn't satisfy the last example).

Thanks.

回答1:

Yes. You can use the "G" format specifier. For samples, see String.Format's documentation.

For example:

decimal value = 14.05m;
string result = String.Format("{0:G}", value); // "14.05"

value = 14m;
result = String.Format("{0:G}", value); // "14"


回答2:

You could use something like: FormatNumber(VariableToBeFormatted, 2).Replace(".00", String.Empty)



回答3:

I don't think you'll be able to do that without some sort of conditional formatting, because you want the formatting to do different things in different cases.

If you'd settle for 14.5 instead of 14.50, then you'd be OK with the 0.## syntax, but I can't think of a way to do it.



回答4:

Follow Reed's answer and add a check after that:

resultArray = result.Split('.');

if (resultArray.Length > 1 && resultArray[1].Length != 2)
    result = String.Format("{0.00}", value);

Not exactly elegant, but will get you the result you desire.

This is assuming the person saying it doesn't apply to 14.5 is correct in the comments.



标签: c# string format