我有一个GitHub issue,它要求在从浮点值到字符串的转换过程中舍入舍入错误。摘录:
System.Quadruple quad = 5.099;
Console.WriteLine(quad);
输出:
5.099000000000000198951966012828052
我可以猜测一个幼稚的实现,但是我认为已经有一些决定显示多少位数的共识方法。算法是什么? The code in question。
答案 0 :(得分:0)
@Brent:我的以上评论可能(是您的回答的一部分)(我将此事视为事后的想法-道歉)。 csprogrammer001的问题是他没有意识到晋升从两倍提高到四倍的含义。在双精度5.099(...〜12digits ...)0和双精度5.099(...〜12digits ...)1之间还有另一个〜999 ... 9(17个十进制9s)有效四进制值。
要更紧密地联系,他们应该执行Quad.Parse(“ 5.09900000000000000000000000000000”)之类的操作,或者显式地将字符串截断以匹配其有效数字。
如果将双精度值插入四边形(未分配的零位)会给出近似等于5.09900000000000019895196601282(8052)的值,那么这就是您应该呈现的值(基于.Net的默认值15,至少应包含30个十进制数字)。您唯一可以考虑“修复”该示例的方法就是使用类似double-> round-> string-> pad-> quad之类的“猜测意图”,而您不想这样做。
ToString()的格式设置选项是不错的选择。