双 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 格式都不能满足我的要求。
出于我的目的,我能够编写一种方法来处理我遇到的场景,但由于它不适用于所有可能的值,所以我不在这里发布它。
感谢所有海报的帮助。
如果您指定格式#,0.#
您将获得:
- 千个分离器
- 根据需要提供尽可能多的小数
如果我正确阅读问题,这应该可以满足您的要求。