Convert decimal to string without commas or dots

You don't need casts, you don't need to know where the decimal is, and you certainly don't need Linq. This is literally a textbook-case of Regular Expressions:

Regex regx = new Regex("[^0-9]");
var amountString = regx.Replace(amount, "");

Couldn't be simpler. And you can pass it strings with other odd monetary characters, or any character at all, and all you will get out is the decimal string.


You could do it like this:

var amountString = string.Join("", amount.Where(char.IsDigit));

Using the char.IsDigit method will protect you from other unknown symbols like $ and will also work with other currency formats. The bottom line, you don't know exactly what that string will always look like so it's safer this way.


You say it's an amount, so I expect 2 digits after the decimal. What about:

 var amountstring = (amount * 100).ToString();

to get the cents-value without delimiters?

Or maybe even

var amountString = ((int)(amount * 100)).ToString();

to make sure no decimals remain.

EDIT
If a cast to int isn't quite what you want (It would just ignore any extra decimals, like Math.Floor), you can also use one of the Math.Round overloads, for instance:

var amountString = Math.Round(amount * 100, MidpointRounding.ToEven).ToString();

The MidpointRounding.ToEven (also known as "Banker's Rounding") will round a .5 value to the nearest even value, instead of always to the next higher value.

Tags:

C#

.Net