C# 小数部分的十进制分组分隔符
我想知道设置数字格式的最佳方法是什么,这样C# 小数部分的十进制分组分隔符,c#,decimal,comma,separator,fractions,C#,Decimal,Comma,Separator,Fractions,我想知道设置数字格式的最佳方法是什么,这样NumberGroupSeparator不仅可以用于逗号左侧的整数部分,还可以用于逗号右侧的小数部分 Math.PI.ToString("###,###,##0.0##,###,###,###") // As documented .. // ..this doesn't work 3.14159265358979
NumberGroupSeparator
不仅可以用于逗号左侧的整数部分,还可以用于逗号右侧的小数部分
Math.PI.ToString("###,###,##0.0##,###,###,###") // As documented ..
// ..this doesn't work
3.14159265358979 // result
3.141,592,653,589,79 // desired result
如
NumberGroupSeparator
中所述,它只在逗号的左侧起作用。我想知道为什么???有点笨重,它对科学数字不起作用,但这里有一个尝试:
class Program
{
static void Main(string[] args)
{
var π=Math.PI*10000;
Debug.WriteLine(Display(π));
// 31,415.926,535,897,931,899
}
static string Display(double x)
{
int s=Math.Sign(x);
x=Math.Abs(x);
StringBuilder text=new StringBuilder();
var y=Math.Truncate(x);
text.Append((s*y).ToString("#,#"));
x-=y;
if (x>0)
{
// 15 decimal places is max reasonable precision
y=Math.Truncate(x*Math.Pow(10, 15));
text.Append(".");
text.Append(y.ToString("#,#").TrimEnd('0'));
}
return text.ToString();
}
}
最好使用
.ToString()
生成的字符串:
好吧,这不是我的强项,但我想这可能是我最好的选择:
string input = Math.PI.ToString();
string decSeparator = System.Threading.Thread.CurrentThread
.CurrentCulture.NumberFormat.NumberGroupSeparator;
Regex RX = new Regex(@"([0-9]{3})");
string result = RX.Replace(input , @"$1" + decSeparator);
谢谢收听..,因为它无效。除非第一组是两个项目:
3.14159265358979
?显然,一个人需要从逗号和十分之一开始分组,百分之一和千分之一将构成一个完全正常的分组!这不是它的意义所在——它是关于可读性的@TaW有点主观,但我看不懂。数字组逗号表示这是一个大数字(数千亿左右),直到你发现这个点,它看起来真的很奇怪。这不是一种常用的格式,这可能就是它不起作用的原因。在你提问之前,我猜不会有人想这样格式化他们的数字;但当你这样做的时候,你希望它们可读。
3
3.1
3.14
3.142
3.141,6
3.141,59
3.141,593
3.141,592,7
3.141,592,65
3.141,592,654
3.141,592,653,6
3.141,592,653,59
3.141,592,653,59
3.141,592,653,589,8
3.141,592,653,589,79
string input = Math.PI.ToString();
string decSeparator = System.Threading.Thread.CurrentThread
.CurrentCulture.NumberFormat.NumberGroupSeparator;
Regex RX = new Regex(@"([0-9]{3})");
string result = RX.Replace(input , @"$1" + decSeparator);