我正在尝试将浮点数四舍五入到小数点后 6 位。从 double 转换为 float 似乎几乎可以做到这一点,但是在此过程中我注意到了一些奇怪之处。无论我做什么,如果我稍后转换回双精度值,我似乎最终会得到虚构的额外十进制值。我无法避免转换回双精度 - 这在我无法更改的应用程序的一部分中,所以我只是想了解为什么我的代码会产生原本不存在的额外小数位。
例如; 我从以下值开始并将其转换为双精度值:
float foo = 50.8467178;
double bar = Convert.ToDouble32(foo);
// Sorry line above originally said ToInt32 which was a typo :(
..那么“bar”将是: 调试器中的50.846717834472656 。
但是:
Convert.ToDouble(50.8467178).ToString()
...产生:50.8467178 (在调试器中)。即它没有额外的价值。
为什么最后会出现多余的数字?我怎样才能阻止这个?最后:为什么在上述任何一个上调用 ToString() 与调试器显示的相比,通常输出不同的小数位数?