安全范围的双倍,可以投射浮动,没有任何数据丢失

时间:2014-09-14 08:17:25

标签: 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包括“。”),则成功转换为浮点而不会丢失。这是真的吗?

2 个答案:

答案 0 :(得分:1)

首先,您不应该将f添加到:

double value = 1423210126.00f;

因为f用于浮动,你实际上是说你的数字是浮点数,而这里是double.try我的例子:

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.1
123456.123456789

所以float可以容纳大约6位数字并加倍大约14位数字,在这个例子中,如果你将double转换为float,它将保持6位数(在"。"之后的数字)和你的数字在浮动范围内,它将是准确的,否则您将丢失数据(超过6位数)。还可以看到最小值和最大值:

enter image description here

并查看以下帖子了解更多信息。

Convert

浮点数的第7位和双位的第15位可能是否准确取决于数字是否在范围内。

答案 1 :(得分:0)

float是32位,double是64。 这意味着浮动只能存储双倍可以存储的一半。 所以基本上浮点数可以存储一半大小的数据,就像双重存储的那样。