C#如何将double格式化为字符串并且只在必要时显示小数位?

3

我在StackOverFlow上找到了这个问题,但它没有解决我的问题。如何将double格式化为字符串并仅在必要时显示小数位?

Weight

0.500
18.000
430.000

通过上面网址中的解决方案,我的结果显示为以下形式:
Weight

0.5 
18
430

我的问题是在小数位上,我想将小数位显示为3个数字,就像这样:

Weight

0.500   
18
430

1
猜测而言,你需要使用“000”代替“#”。 - Sayse
它不起作用。在数字后面显示多个0。 - BaHaR
所以你想要三个小数位,当不是三个零时。否则你想要没有小数位? - Simeon Pilgrim
我问这个问题是因为10.00001有小数数据,但如果显示为3位小数将会是10.000,您是否希望如此?或者您希望它作为10。 - Simeon Pilgrim
5个回答

4
您可以在字符串格式中使用数字占位符#,并在小数点.后面使用零占位符0
string num = d % 1 == 0 ? d.ToString(".###") : d.ToString(".000");

数字占位符

如果有相应的数字,则用数字替换井号;否则,结果字符串中不显示数字。

零占位符

如果有相应的数字,则用数字替换零;否则,在结果字符串中显示零。

这篇自定义数值格式说明了如何格式化数字。


它将.000添加到所有值中。我只想在其具有小数位的情况下添加.000。 - BaHaR
你可能需要这个:d.ToString(".#00"); - Adil

2

我认为您不能仅使用单个string.Format()实现您想要的功能。因此,您可以使用一个子句:

if(weight % 1.0 > 0){
     string.Format("{0:0.000}", weight)
}
else {
     string.Format("{0:0}", weight)
}

甚至更好的是:
string.Format(weight % 1.0 > 0 ? "{0:0.000}" : "{0:0}", weight)  

编辑:抱歉,我漏掉了一部分 =))

编辑:如果您需要对结果进行取底操作,可以使用以下方法:

string.Format(weight % 1.0 >= 0.001 ? "{0:0.000}" : "{0:0}", weight)  

这是否适用于0.0001,因为当以3dp显示时,它将显示为0.000。 - Simeon Pilgrim
谢谢您的回复,但它还是不起作用 :( 它显示1而不是0.500。 - BaHaR

1

0
你可以使用以下方法:
用法:
    string format1 = GetFormat(123.4567);
    string format2 = GetFormat(123.45);
    string format3 = GetFormat(123.0);
    //format1 = 123.46
    //format2 = 123.45
    //format3 = 123

    private static string GetFormat(double d)
    {            
        string format;
        if (d == Convert.ToInt32(d))
            format = string.Format("{0:0.##}", d);
        else
            format = string.Format("{0:0.00}", d);

        return format;
    }

更多信息:

http://csharpexamples.com/c-string-formatting-for-double/

http://msdn.microsoft.com/en-us/library/vstudio/0c899ak8%28v=vs.100%29.aspx


0
我找到了解决方案:
string[] strList = Weight.ToString().Split('.');//or ',' for diffrent regions
if(strList[1] == "000")
     str = string.Format("{0:#,0.########}", b);

谢谢:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接