110,536
社区成员
发帖
与我相关
我的任务
分享
string.Format("{0:G}", (double)50000000000000000)
来格式化的。而对于 a 的值,由于字符串反向分析与double 值不一致,所以使用17位精度的字符串格式方式。var a = string.Format("{0:R}", (double)50000022001200047);
var b = string.Format("{0:R}", (double)50000000000000000);
的输出。
但是这个不是最重要的,最重要的是高层的设计思路和分层思路正确,这样才能不走偏。R 或 r
往返过程
只有 Single 和 Double 类型支持此格式。往返过程说明符保证转换为字符串的数值再次被分析为相同的数值。使用此说明符格式化数值时,首先使用常规格式对其进行测试:Double 使用 15 位精度,Single 使用 7 位精度。如果此值被成功地分析回相同的数值,则使用常规格式说明符对其进行格式化。但是,如果此值未被成功地分析为相同数值,则它这样格式化:Double 使用 17 位精度,Single 使用 9 位精度。
虽然此处可以存在精度说明符,但它将被忽略。使用此说明符时,往返过程优先于精度。
double 永远也不会胡乱改变,改变的是 string 格式化结果,而不是什么 double 被自动转化。