C# 双精度的安全范围,可以在不丢失任何数据的情况下转换为浮动
在不丢失任何数据的情况下(包括分数部分和不包括分数部分),可以转换为浮动的double的安全范围是多少 示例:C# 双精度的安全范围,可以在不丢失任何数据的情况下转换为浮动,c#,floating-point,double,floating-point-conversion,C#,Floating Point,Double,Floating Point Conversion,在不丢失任何数据的情况下(包括分数部分和不包括分数部分),可以转换为浮动的double的安全范围是多少 示例: double value = 1423210126.00f; float floatVal = (double)value; //floatVal = 1423210112 if we print. There is a data loss of +14. 我的观察: 如果double中的位数为7位(或8位包括在内)”,则该值将成功转换为float而不会丢失。这总是正确的吗?
double value = 1423210126.00f;
float floatVal = (double)value;
//floatVal = 1423210112 if we print. There is a data loss of +14.
我的观察:
如果double中的位数为7位(或8位包括在内)”,则该值将成功转换为float而不会丢失。这总是正确的吗?浮点值是32位,双精度值是64位。 这意味着float只能存储double所能存储的一半。
所以基本上,float可以存储double可以存储的数据的一半大小。首先,您不应该将f添加到:
double value = 1423210126.00f;
因为f是用来表示浮点数的,你实际上是说你的数字是浮点数,而这里是双精度的。试试我的例子:
private void Form1_Load(object sender, EventArgs e)
{
double y = 123456.123456789123456789;
float x = 123456.123456789123456789f;
MessageBox.Show(x.ToString());
MessageBox.Show(y.ToString());
}
您可以看到打印的数字是:
123456.1123456.123456789 所以float可以容纳约6位数字,double可以容纳约14位数字,在本例中,如果将double转换为float,它将容纳6位数字(数字在“.”之后),当数字在float范围内时,它将是准确的,否则将丢失数据(超过6位)。另请参见最小值和最大值: 更多信息,请参阅下面的帖子
浮点数中的第7位和双精度中的第15位可能准确与否取决于数字是否在范围内。任何浮点数都可以精确表示为双精度,可以安全地认为双精度中的额外位都是
0
。因此,只有那些表示与浮点值相同的值的双精度数才能在不丢失某些信息的情况下进行转换。我之所以作出这样的评论,是因为我怀疑这不是你问题的答案,而是你所问问题的答案。@s.s检查我的答案和相关链接。@s.s你得到答案了吗?@Riddle:我将你的回答标记为答案。我在我们的应用程序中做了一些优化带宽的技巧,其中如果数据值(数据为双类型)