c# - 浮点数到字符串转换的位数是如何确定的?
问题描述
我有一个 GitHub问题,要求在从浮点值转换为字符串期间截断舍入错误。摘录:
System.Quadruple quad = 5.099;
Console.WriteLine(quad);
输出:
5.099000000000000198951966012828052
我可以猜测一个幼稚的实现,但我认为有一些商定的方式来决定应该显示多少位数。算法是什么?有问题的代码。
解决方案
@Brent:我上面的评论可能是(部分)你的答案(我认为这个问题是事后才想到的 - 道歉)。csprogrammer001 的问题是(s)他没有意识到从双重提升到四重的影响。在 double 5.099(...~12digits...)0 和 double 5.099(...~12digits...)1 之间存在另一个 ~999...9(17 个十进制 9)有效的四边形值。
为了更接近他们应该做类似 Quad.Parse("5.09900000000000000000000000000000") 或明确截断您的字符串以匹配其有效数字。
如果将双精度值插入四边形(未分配的位为零)接近该死的 5.09900000000000019895196601282(8052),那么这就是您应该呈现的内容(基于 .Net 的默认值 15,至少 30 个十进制数字)。您唯一可以考虑“修复”该示例的方法是使用诸如 double->round->string->pad->quad 之类的“猜测意图”,而您不想这样做。
ToString() 的格式化选项将是一个不错的补充。
推荐阅读
- powershell - 将元素插入嵌套在哈希表中的数组中
- php - 欧洲时间更改后的PHP日期
- react-native - Integrating shopify database in React native
- excel - 在 VBA 中获取正确的默认保存名称和带有空格的保存目录
- r - Box-plot R calculating outliers
- mysql - FIND_IN_SET woth trim function for values
- python - 转置字段 csv、Python(Numpy 或 Pandas)
- arrays - Update an element of an Array in a Document in MongoDB with Mongoose
- c - 读取文本文件并在链表中保存数据
- android - Kotlin 扩展函数来拆分大类