为什么那种类型是double而不是float? < P> 问题:< /强>在作业问题中(要用钢笔做,不需要编码),必须确定C++中添加的类型和值。

为什么那种类型是double而不是float? < P> 问题:< /强>在作业问题中(要用钢笔做,不需要编码),必须确定C++中添加的类型和值。,c++,floating-point,language-lawyer,implicit-conversion,C++,Floating Point,Language Lawyer,Implicit Conversion,1 + 0.5 我的回答是: 键入float(因为我认为integer+float=float) 值1.5(据我所知,当添加两种不同的数据类型时, 添加的结果将转换为不丢失任何信息的数据类型。) 解决方案说: 类型:双 价值:1.5 我的问题:为什么0.5是双精度而不是浮动?我如何区分浮点数和双人点数?我的意思是,0.5看起来像一个浮点和一个双倍。C++中的< /P> < P>,没有类型后缀的浮点文本默认为双< /代码>。如果希望它是float,则需要指定f后缀,例如0.5f首先,是整

1 + 0.5
我的回答是:

  • 键入float(因为我认为
    integer+float=float
  • 值1.5(据我所知,当添加两种不同的数据类型时, 添加的结果将转换为不丢失任何信息的数据类型。)
解决方案说:

  • 类型:双
  • 价值:1.5

我的问题:为什么0.5是双精度而不是浮动?我如何区分浮点数和双人点数?我的意思是,0.5看起来像一个浮点和一个双倍。C++中的< /P> < P>,没有类型后缀的浮点文本默认为<代码>双< /代码>。如果希望它是
float
,则需要指定
f
后缀,例如
0.5f

首先,是<代码>整数+
浮点
=
浮点
。关于那部分你是对的

问题不在于这一点,而在于您假设
0.5
是一个
float
。事实并非如此。在C++中,意思是<代码> 0F f <代码>是一个浮点。然而,
0.5
实际上是一个
double
。这意味着你的方程现在是:

integer + double = double
正如你所看到的,这个结果是双重的。这就是为什么你的问题的正确答案是结果类型是double


顺便说一下,要清除记录,从技术上讲,这里发生的不是
integer+double=double
。发生的情况是,
1
正在受到影响。本质上,
1
转换为
double
,因为操作的另一面也是
double
。这样,计算机添加的是相同的类型,而不是不同的类型。这意味着这里实际发生的加法更像:

double + double = double

0.5f
是浮点文本
0.5
是一个双重文本。天哪,谢谢你的精彩解释!所以当一个数字X.X后面跟一个f:X.Xf,然后只有这个数字是一个浮点数,如果一个数字后面不跟一个f,那么它是双精度的,对吗?不客气。如果你想表达你的感激之情,你可以投票支持我的答案,或者如果你认为它比另一个答案好(我承认这也是一个很好的答案),你也可以接受它。你说得对。如果它后面没有任何东西(我认为,对于长双打,它后面也可以跟一个
L
),那么默认情况下它是一个double。这是一个接受,但没关系。我现在就要了。如果需要的话,不要害怕稍后更改已接受的答案。也感谢您的精彩解释,如果有一个没有点的数字,比如说7,但后面跟着一个f:7f,那么7f也是float,对吗?:-)不,在f前面必须有一个点,因此
7.f
是正确的。