如何在.NET Framework中没有科学记数法的情况下将double转换为浮点字符串表示形式?
"小"样本(有效数字可以是任何大小,例如1.5E200或1e-200):
3248971234698200000000000000000000000000000000
0.00000000000000000000000000000000000023897356978234562
Run Code Online (Sandbox Code Playgroud)
的无标准的数字格式都是这样的,和一个自定义格式也似乎并没有让小数点后具有开放位数.
这不是如何将double转换为字符串而没有10代表(E-05)的重复,因为那里给出的答案并没有解决手头的问题.这个问题中接受的解决方案是使用固定点(例如20位数),这不是我想要的.固定点格式化和修剪冗余0不能解决问题,因为固定宽度的最大宽度为99个字符.
注意:解决方案必须正确处理自定义数字格式(例如,其他小数分隔符,具体取决于区域性信息).
编辑:问题实际上只是取代前面提到的数字.我知道浮点数如何工作以及可以使用和计算哪些数字.
如何将double转换为字符串而无需10次表示(E-05)
double value = 0.000099999999833333343;
string text = value.ToString();
Console.WriteLine(text); // 9,99999998333333E-05
Run Code Online (Sandbox Code Playgroud)
我想字符串文本是0.000099999999833333343(或者差不多,我不做火箭科学:)
我尝试过以下变种
Console.WriteLine(value.ToString()); // 9,99999998333333E-05
Console.WriteLine(value.ToString("R20")); // 9,9999999833333343E-05
Console.WriteLine(value.ToString("N20")); // 0,00009999999983333330
Console.WriteLine(String.Format("{0:F20}", value)); // 0,00009999999983333330
Run Code Online (Sandbox Code Playgroud)
做串扰N20或格式F20似乎最接近我想要的,但我最终得到了很多尾随零,是否有一种聪明的方法可以避免这种情况?我想尽可能接近双重表示0.000099999999833333343