Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

decimal ToString formatting which gives at least 1 digit, no upper limit

Tags:

c#

.net

tostring

How to format a decimal in C# with at least one digit after the decimal point, but not a fixed upper limit if specified more than 1 digit after the decimal point:

5 -> "5.0"
5.1 -> "5.1"
5.122 -> "5.122"
10.235544545 -> "10.235544545"
like image 981
Stian Avatar asked Nov 18 '11 14:11

Stian


2 Answers

Use ToString("0.0###########################").

Some notes:,

  • There are 27 #s in there, as the decimal structure can accommodate precision up to 28 decimal places.
  • The 0 custom specifier will cause a digit to always be displayed, even if the value is 0.
  • The # custom specifier only displays a value if the digit is zero and all of the digits to the right/left of that digit (depending on what side of the decimal point you are on) are zero.
  • You will need to insert as many # after the first 0 to the right of the decimal point to accommodate the length of all the values you will pass to ToString, if you will only have precision to 10 decimal places, then you need nine # (since you have the first decimal place to the right handled by 0)

For more information, see the section of MSDN titled "Custom Numeric Format Strings".

like image 71
casperOne Avatar answered Oct 19 '22 07:10

casperOne


[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var a = 5m;
        var b = 5.1m;
        var c = 5.122m;
        var d = 10.235544545m;

        var ar = DecToStr.Work(a);
        var br = DecToStr.Work(b);
        var cr = DecToStr.Work(c);
        var dr = DecToStr.Work(d);

        Assert.AreEqual(ar, "5.0");
        Assert.AreEqual(br, "5.1");
        Assert.AreEqual(cr, "5.122");
        Assert.AreEqual(dr, "10.235544545");
    }
}

public class DecToStr
{
    public static string Work(decimal val)
    {
        if (val * 10 % 10 == 0)
            return val.ToString("0.0");
        else
            return val.ToString();
    }
}
like image 2
Wojtek Turowicz Avatar answered Oct 19 '22 08:10

Wojtek Turowicz