编程语言
首页 > 编程语言> > c#-使用自定义组和小数点分隔符将数字格式设置为字符串,而不更改精度

c#-使用自定义组和小数点分隔符将数字格式设置为字符串,而不更改精度

作者:互联网

我想使用自定义组/千位分隔符和十进制分隔符将一些数字格式化为C#中的字符串.组和小数点分隔符可以根据用户输入进行更改,因此我想使用NumberFormatInfo对象而不是硬编码格式字符串.我的下面代码获得了适当的分隔符,但它将数字的精度始终更改为两位小数,而我想保持数字的全精度,并且仅在需要时才显示小数位(因此整数值没有小数位) .

我该如何实现?我猜我需要更改“ N”参数,但是将其更改为什么?

double n1 = 1234;
double n2 = 1234.5;
double n3 = 1234567.89;
double n4 = 1234.567;

var nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
nfi.NumberGroupSeparator = " ";

string s1 = n1.ToString("N", nfi); //want "1 234" but I get "1 234,00"
string s2 = n2.ToString("N", nfi); //want "1 234,5" but I get "1 234,50"
string s3 = n3.ToString("N", nfi); //correct output of "1 234 567,89" 
string s4 = n4.ToString("N", nfi); //want " 1 234,567" but I get "1 234,57"

解决方法:

以下是我作为扩展方法提出的解决方案.

public static string Format(this double d, NumberFormatInfo numberFormatInfo)
{
    string s = d.ToString(CultureInfo.InvariantCulture);
    int index = s.IndexOf('.');
    int decimalPlaces = index == -1 ? 0 : s.Length - index - 1;
    return d.ToString($"N{decimalPlaces}", numberFormatInfo);
}

标签:tostring,number-formatting,c
来源: https://codeday.me/bug/20191027/1941996.html