问题真的很简单。我有一个要转换为浮点数的双精度数。
double doubleValue = 0.00000000000000011102230246251565;
float floatValue = (float)doubleValue;
现在当我这样做时。浮动价值只是疯了。它的值为“ 1.110223E-16 ” 我是否需要为此流程做一些额外的事情。值应该是 0 或 0.1,但它不在这里。这里有什么问题?
问题真的很简单。我有一个要转换为浮点数的双精度数。
double doubleValue = 0.00000000000000011102230246251565;
float floatValue = (float)doubleValue;
现在当我这样做时。浮动价值只是疯了。它的值为“ 1.110223E-16 ” 我是否需要为此流程做一些额外的事情。值应该是 0 或 0.1,但它不在这里。这里有什么问题?
转换double
为float
肯定会损失精度。但该值1.110223E-16
是指数符号,即提高到 -16 次方,这意味着它类似于0.0000000000000001110223
.
您应该使用Math.Round()来舍入数字。
浮子完全没问题。它表示 double 的值,直到浮点数的精度。
1.110223E-16
是 的另一种表示法0.0000000000000001110223
。
因此,通常情况下,转换Double
为float
. 1.110223E-16
等于0.0000000000000001110223
它的表示。
如果你想四舍五入你的值,你可以使用Math.Round()
方法。
将值四舍五入为最接近的整数或指定的小数位数。
看看浮点指南
一个浮点数能够以完美的精度表示大约 6 个有效数字。这与我认为您假设的 6位小数不同。
实际上它给出了正确的值。
转换为浮点数后如何摆脱指数
double doubleValue = 0.00000000000000011102230246251565;
float result = (float)doubleValue;
decimal d = Decimal.Parse(result.ToString(), System.Globalization.NumberStyles.Float);