2

问题真的很简单。我有一个要转换为浮点数的双精度数。

double doubleValue = 0.00000000000000011102230246251565;
float floatValue = (float)doubleValue;

现在当我这样做时。浮动价值只是疯了。它的值为“ 1.110223E-16 ” 我是否需要为此流程做一些额外的事情。值应该是 0 或 0.1,但它不在这里。这里有什么问题?

4

5 回答 5

10

转换doublefloat肯定会损失精度。但该值1.110223E-16是指数符号,即提高到 -16 次方,这意味着它类似于0.0000000000000001110223.

您应该使用Math.Round()来舍入数字。

于 2013-06-27T07:07:49.097 回答
1

浮子完全没问题。它表示 double 的值,直到浮点数的精度。

1.110223E-16是 的另一种表示法0.0000000000000001110223

于 2013-06-27T07:07:54.170 回答
1

Double双精度浮点数但是单精度浮点数float

因此,通常情况下,转换Doublefloat. 1.110223E-16等于0.0000000000000001110223它的表示。

如果你想四舍五入你的值,你可以使用Math.Round()方法。

将值四舍五入为最接近的整数或指定的小数位数。

看看浮点指南

于 2013-06-27T07:10:32.177 回答
0

一个浮点数能够以完美的精度表示大约 6 个有效数字。这与我认为您假设的 6位小数不同。

于 2013-06-27T07:10:50.570 回答
0

实际上它给出了正确的值。

转换为浮点数后如何摆脱指数

double doubleValue = 0.00000000000000011102230246251565;
float result = (float)doubleValue;
decimal d = Decimal.Parse(result.ToString(), System.Globalization.NumberStyles.Float);
于 2013-06-27T07:18:18.780 回答