C# C数字格式打印所有有效数字和分隔符

C# C数字格式打印所有有效数字和分隔符,c#,string-formatting,number-formatting,format-string,C#,String Formatting,Number Formatting,Format String,问这个我觉得有点傻。。。我需要格式化一个数字,以显示千位分隔符、小数点以及显示所有有效位所需的准确度。 我有一个有效的解决方案,但我觉得必须有更好的方法: double myNumber = 1234.56789; myNumber.ToString("#,##0.#####################################################################################################################

问这个我觉得有点傻。。。我需要格式化一个数字,以显示千位分隔符、小数点以及显示所有有效位所需的准确度。 我有一个有效的解决方案,但我觉得必须有更好的方法:

double myNumber = 1234.56789;
myNumber.ToString("#,##0.#########################################################################################################################"); // see my problem with this?
// will yield "1,234.56789"
我从头到尾在两个互联网上搜索,找不到问题的答案。答案如此相似,不符合要求。和的两篇msdn文章都被我反复阅读,但没有带来突破

我的注意力被带到了,但不幸的是,没有人给出更简洁的字符串格式


一个理智而熟练的开发人员会使用什么格式字符串?

老实说,我看你的格式字符串没有什么大问题,只要你不到处重复它,把它放在一个充满常量的类中,然后重用

最接近的标准格式字符串可能是N50,但这将显示指定长度的零,因此您的示例显示为

1,234.56789000000000000000000000000000000000000000000000

你没有从谷歌上找到你想要的答案是因为你的问题有问题

双精度不是以十进制形式存储的,它们是二进制数。因此,基于十进制的有效数字的概念没有真正意义。例如,数字0.1不能用二进制精确表示,就像1/3不能用十进制表示法精确表示一样


你可以像@jamice建议的那样——这可能是你想要的——尽管N50有点过头了,但将二进制转换为双精度时,你最多只能得到17位有效数字。但是,你应该知道,这并不是真正写出有效数字。从根本上说,你不能写出计算机计算出的十进制数的所有有效数字,因为它是用二进制计算的。计算机必须先将其转换为十进制,然后再将其写出,这必然会导致精度损失。

这有帮助吗:?@JensHorstmann-这在英语中可能更有用,因为这里的大多数访问者和本网站都是英语speaking@Jamiec同意。还没认出是德语:|@JensHorstmann:实际上我说德语。我看了这一页。但是那里的表格并没有提供比我链接的两篇msdn文章更多或更深入的见解。@Richard:谢谢链接,检查过了。我明确地要求一个解决方案,该解决方案不需要。同意这个解决方案。您可以使用myNumber.tostring20;对于double或N30表示十进制,以及之后,对double/decimal的感知比字符串值的外观更大。我在调试中发现,两种解决方案在点后仅显示11位数字,但N20解决方案在第11位数字后显示零…@JensHorstmann,这是因为双精度只能保存15-16位小数精度。小数点左边有4位,右边只有11位。