使用自定义舍入和千位分隔符打印 double

print double with custom rounding and thousand separator

我有很多数字需要格式化,我希望它们易于阅读,但我的用户。我需要:

我想到的最好的是这段代码:

private string RoundToString(double d)
{
    return Double.IsNaN(d) ? "Out Of Bounds" : d.ToString("N" + (int)numUpDownRoundValue.Value);
}

但如果四舍五入很高,我会得到 很多 无用的 0:

182,0000000000  370,5000000000          370,5444319880  121,0000000000  517,0000000000  5 949 090,8555680300                        
105,3700000000  158,2750000000          165,4869516069  74,1850000000   245,4200000000  2 656 893,0080484100            
107 277,0000000000  109 452,0000000000          110 879,4795092180  100 261,0000000000  119 221,0000000000  1 780 170 043,5204900000

我也试试这个:

private string RoundToString(double d)
{
    return Double.IsNaN(d) ? "Out Of Bounds" : Math.Round(d, (int)numUpDownRoundValue.Value).ToString("N");
}

但是 N 选项提前裁剪(精度损失)

编辑

我想要什么:

182 370,5 -- 370,5444319880 -- 121 517 -- 5 949 090,85556803                    
105,37 -- 158,275 -- 165,4869516069 -- 74,185 -- 245,42 -- 2 656 893,00804841           
107 277 -- 109 452 -- 110 879,479509218 -- 100 261  119 221 -- 1 780 170 043,52049

换句话说,我想要千位分隔符并且没有无用的零。

怎么样:

d.ToString("#,#.##########")

在 msdn 站点上查找 custom numeric format

如果您想要 最多 小数点后 10 位但不想训练零,请使用:

d.ToString("#,##0."+new string('#',(int)numUpDownRoundValue.Value))