如何确定浮点数到字符串转换的位数?

时间:2019-06-20 22:09:33

标签: c# c++-cli number-formatting

我有一个GitHub issue,它要求在从浮点值到字符串的转换过程中舍入舍入错误。摘录:

System.Quadruple quad = 5.099;
Console.WriteLine(quad);

输出:

5.099000000000000198951966012828052

我可以猜测一个幼稚的实现,但是我认为已经有一些决定显示多少位数的共识方法。算法是什么? The code in question

1 个答案:

答案 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()的格式设置选项是不错的选择。