double的安全范围是什么,可以在没有丢失任何数据的情况下(无论是否包含分数部分)进行浮动加注
示例:
double value = 1423210126.00f;
float floatVal = (double)value;
//floatVal = 1423210112 if we print. There is a data loss of +14.
我的观察: 如果double中的位数是7位数(或8包括“。”),则成功转换为浮点而不会丢失。这是真的吗?
答案 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位数)。还可以看到最小值和最大值:
并查看以下帖子了解更多信息。
浮点数的第7位和双位的第15位可能是否准确取决于数字是否在范围内。
答案 1 :(得分:0)
float是32位,double是64。 这意味着浮动只能存储双倍可以存储的一半。 所以基本上浮点数可以存储一半大小的数据,就像双重存储的那样。