繁体   English   中英

c#如何将双精度格式格式化为字符串,并在必要时仅显示十进制数字?

[英]c# How do I format a double to a string and only show decimal digits when necessary?

我在StackOverFlow中发现了这个问题,但并没有解决我的问题。 如何将双精度格式格式化为字符串,并在必要时仅显示十进制数字?

Weight

0.500
18.000
430.000

通过上面URL中的解决方案,我的结果以这种形式显示:

Weight

0.5 
18
430

我的问题是十进制数字,我想以三位数显示十进制数字,如下所示:

Weight

0.500   
18
430

您可以在点后使用数字占位符 #零占位符 0 . 字符串格式。

string num = d % 1 == 0 ? d.ToString(".###") : d.ToString(".000");

数字占位符

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

零占位符

如果存在1,则将零与相应的数字放置在一起; 否则,结果字符串中将出现零。

此msdn文章“ 自定义数字格式字符串”介绍了如何格式化数字。

我认为您无法使用单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)  

尝试

 num.ToString("G3") // for 3 significant digits

http://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx

您可以使用如下方法:

用法:

    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

我找到了解决方案:

string[] strList = Weight.ToString().Split('.');//or ',' for diffrent regions
if(strList[1] == "000")
     str = string.Format("{0:#,0.########}", b);

谢谢:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM