double值的ToString()导致丢失小数位
(1521.6666666666667).ToString() ==> "1521.66666666667"
转换为字符串时有没有办法保存所有小数位
另外
(1521.6666666666667).ToString("F13"); => "1521.6666666666700"
(1521.6666666666667).ToString("0.0000000000000"); => "1521.6666666666700
这是否与双值
的大小有关答案 0 :(得分:4)
解决方法是阅读文档。说真的不是" ToString"那就是失去它。
让我引用https://msdn.microsoft.com/en-us/library/b1e65aza.aspx中的浮点数据类型:
精确度:7位数。
这些数字在你的来源中,它们永远不会浮动。不正确。该值是四舍五入的。
答案 1 :(得分:2)
fn filter<F>(self, f: F) -> Option<T> where F: for<'a> FnOnce(&'a T) -> bool
与浮点类型相比,十进制类型具有更高的精度和更小的范围。
具体来说,f
有28-29位有效数字,而不是&value
为15-16。
答案 2 :(得分:1)
你必须格式化字符串。
(1521.6666666666667).ToString("R");
答案 3 :(得分:1)
您可以使用Decimal
代替Double
:
(1521.6666666666667M).ToString(); // note "M"
另一种可能性(如果你必须使用Double
)是&#34; R&#34;格式:
(1521.6666666666667).ToString("R");
答案 4 :(得分:0)
使用The Round-trip ("R") Format Specifier,它将尝试确保将转换为字符串的数值解析回相同的数值。仅Single
,Double
和BigInteger
类型支持此格式。
Double
和Single
值, 但,“R”格式说明符在某些情况下无法成功地往返原始值,并且性能相对较差。相反,我们建议您使用Double
值的“G17”格式说明符和“G9”格式说明符来成功往返单值。
来自MSDN:
在某些情况下,如果使用
/platform:x64
或/platform:anycpu
开关进行编译,则使用“R”标准数字格式字符串格式化的 Double 值无法成功往返在64位系统上。