双 ToString 格式,没有精度丢失和组分隔符

本文关键字:分隔符 精度 ToString 格式 | 更新日期: 2023-09-27 18:31:10

我正在尝试使用组分隔符获取 Double 值的字符串输出,并且在任何区域性中都不会损失精度。有没有办法在不编写我自己的方法来做到这一点?

我知道您可以使用 ToString("N0"),但这会导致精度损失。我知道您可以使用 ToString("R") 来保持精度,但这不包括组分隔符。

例如对于不变文化中的 Double.MaxValue,我想要

"179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000"

编辑:当我说精度损失时,我的意思是有效数字的全部数量,而不是在值的"十进制"部分不丢失精度。我希望能够使用组分隔符进行"往返",因此ToString -> Parse -> ToString。

编辑2:为了更好地比较我试图解决的问题,这里是使用ToString("N0")时的输出。在这里,您可以看到有效数字末尾的四舍五入:

"179,769,313,486,232,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000"

双 ToString 格式,没有精度丢失和组分隔符

看起来任何内置的 ToString 格式都不能满足我的要求。

出于我的目的,我

能够编写一种方法来处理我遇到的场景,但由于它不适用于所有可能的值,所以我不在这里发布它。

感谢所有海报的帮助。

如果您指定格式#,0.#您将获得:

  • 千个分离器
  • 根据需要提供尽可能多的小数

如果我正确阅读问题,这应该可以满足您的要求。