Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 用逗号格式化数字,但保留小数_.net_String_Formatting - Fatal编程技术网

.net 用逗号格式化数字,但保留小数

.net 用逗号格式化数字,但保留小数,.net,string,formatting,.net,String,Formatting,我想把数字分组成成双乘千,但也要输出数字中的小数。我搞不懂格式字符串 1000=>1000 100000 => 100,000 123.456 => 123.456 100000.21 => 100,000.21 100200.123456 => 100,200.123456 免责声明(并不像你想象的那么直截了当): 请不要指给我看,它不能回答我的问题 请不要指给我看,这些文章对我没有帮助。(如果你认为我读错了,请自己读并贴出正确答案) .ToString(“n”)不起作用,它将数字四舍五入

我想把数字分组成成双乘千,但也要输出数字中的小数。我搞不懂格式字符串

1000=>1000
100000 => 100,000
123.456 => 123.456
100000.21 => 100,000.21
100200.123456 => 100,200.123456
免责声明(并不像你想象的那么直截了当):

  • 请不要指给我看,它不能回答我的问题
  • 请不要指给我看,这些文章对我没有帮助。(如果你认为我读错了,请自己读并贴出正确答案)
  • .ToString(“n”)
    不起作用,它将数字四舍五入
试试这个:

VB:

C#:

问题是没有格式来处理任意数量的小数。但是,由于您只能存储非常有限的精度,您可以使用该精度,并根据需要添加几个字符来覆盖它,前提是您愿意让它删除任何不重要的0


您发布的MSDN链接正是您阅读该如何操作的地方。

这似乎正是您想要的:

public void Code(params string[] args)
{
    Print(1000);
    Print(100000);
    Print(123.456);
    Print(100000.21 );
    Print(100200.123456);
}

void Print(double n)
{
    Console.WriteLine("{0:###,###.#######}", n);
}

1,000
100,000
123.456
100,000.21
100,200.123456

试着简单使用一下试试试试试试简单使用一下“35;;,35;;,,这个加了逗号的千人等等,但我不知道它是否会保留小数的小数,否则,否则,否则,否则,否则,否则,否则,否则,,,,,,35周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五的简单使用,这为千千千千千千千千万万等等等等等,但我不知道我不知道它是否会保留小数的小数,但我不知道它是否会保持小数,否则否则否则,否则,否则否则,否则,否则,否则,否则,否则,,,,,,,,,,,,,,,,3535周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五>您可以创建自定义格式字符串.ToString(“#####,###########”)

这可能有点慢,但它可以满足您的需要

public static string FormatNumber(double num)
{
    string s = num.ToString();
    string result = "";

    if(s.IndexOf('.') != -1)
    {
        result = s.Substring(s.IndexOf('.'));
        s = s.Substring(0, s.IndexOf('.'));
    }

    while (s.Length > 3)
    {
        result = "," + s.Substring(s.Length - 3);
        s = s.Substring(0, s.Length - 3);
    }
    if (s.Length == 0)
        return result.Substring(1);
    return s + result;
}

这是一条古老的线索,但没有一个答案让我完全满意。它们中的大多数将零变为空字符串,包括投票最多的字符串

我认为更好的解决方案是
“、”0.“
,它至少显示零。不过还是很难看。一定有更好的办法

double[] vals = new double[] { 0.0, 0.1234, -0.1234, 1.0, 
                               123456789.123456, 123456789.0, 
                               0.123456789123456 };
foreach (double val in vals) 
{ 
    Console.WriteLine(val + ": " + val.ToString("#,##0.#################")); 
}

如果你有超过7位的小数位,这会不会截断它?看起来是这样,这不太理想,但我可以把它推到12位小数位,这应该是我的一个限制。但对任意数量的小数不起作用。自双精度有15-16位数字以来,已有15-16位数字精度的16位数字,虽然有16位数字,但尽管有“{00::෣周五、日、日、日、日、日、日、日、日、日等16位数字,虽然有15-16位数字,虽然虽然有15位数字,虽然虽然有16位数字,但尽管有“{0:0::::35周五周五周五、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、日、可能的数字。请注意,我更喜欢前导0。感谢格式掩码James,做得很好。我们修复/添加的一件事是,当我们收到0.1时,它只是显示.1,删除0。为了防止这种情况,我们使用了以下面具:{0:#,##############################?虽然这不是最好的解决方案,但它是一个解决方案。
public static string FormatNumber(double num)
{
    string s = num.ToString();
    string result = "";

    if(s.IndexOf('.') != -1)
    {
        result = s.Substring(s.IndexOf('.'));
        s = s.Substring(0, s.IndexOf('.'));
    }

    while (s.Length > 3)
    {
        result = "," + s.Substring(s.Length - 3);
        s = s.Substring(0, s.Length - 3);
    }
    if (s.Length == 0)
        return result.Substring(1);
    return s + result;
}
double[] vals = new double[] { 0.0, 0.1234, -0.1234, 1.0, 
                               123456789.123456, 123456789.0, 
                               0.123456789123456 };
foreach (double val in vals) 
{ 
    Console.WriteLine(val + ": " + val.ToString("#,##0.#################")); 
}