为什么f在浮动值之后放置?

ipk*_*iss 69 java floating-point

我不知道为什么在Java或其他语言中浮点值之后放置f或F?例如,

float fVariable = 12.3f;
Run Code Online (Sandbox Code Playgroud)

除了表明这是浮点值以外的任何其他功能?

Jig*_*shi 59

默认情况下12.3double文字,所以告诉编译器将其视为float显式 - >它使用fF

  • 同样,默认情况下,每个整个文字都是 int。因此,当我们以这种方式分配文字时:long x = 2147483648; (这是 2^31 > int 范围,但编译器仍将其视为 int 字面量。因此我们需要通过添加 L 或 l 来告诉编译器这是很长的) long x = 2147483648L; (2认同)

Per*_*ion 49

看到在程序中只有很多方法来表示数字,Java的设计者不得不挑选并将每个表单分配给最常见的用例.对于选择为默认的表单,表示确切类型的后缀是可选的.

  • 对于Integer文字(int,long),默认值为int.原因很明显.
  • 对于浮点文字(float,double),默认值为double.因为使用double可能允许对存储的值进行更安全的算术运算.

所以,当你输入12你的程序时,那就是一个int文字,而不是12L,这是一个很长的.而当你键入12.3,那是一个双重的文字,而不是12.3F,这是一个浮动.

那么这与哪些相关?主要用于处理向下倾斜或缩小转换.无论何时将long转换为int,或将double转换为float,都存在数据丢失的可能性.因此,编译器会强制您通过发出类似这样的编译错误来指示您确实要执行缩小转换:

float f = 12.3;
Run Code Online (Sandbox Code Playgroud)

因为12.3代表一个double,你必须明确地将它转换为float(基本上在缩小转换时签名).否则,您可以通过使用正确的后缀来指示该数字实际上是浮点数;

float f = 12.3f;
Run Code Online (Sandbox Code Playgroud)

总而言之,必须为longsfloats指定后缀是语言设计者选择的一种妥协,以便平衡指定究竟是什么数字的需要,以及将数字从一种存储类型转换为另一种存储类型的灵活性.


Pet*_*rey 25

float并且double只能为某些值提供近似表示值.例如12.3或0.1

不同之处在于浮点数不那么准确(因为它的精度较低,因为它较小)

例如

System.out.println("0.1f == 0.1 is " + (0.1f == 0.1));
System.out.println("0.1f is actually " + new BigDecimal(0.1f));
System.out.println("0.1 is actually " + new BigDecimal(0.1));
Run Code Online (Sandbox Code Playgroud)

版画

0.1f == 0.1 is false
0.1f is actually 0.100000001490116119384765625
0.1 is actually 0.1000000000000000055511151231257827021181583404541015625
Run Code Online (Sandbox Code Playgroud)

所以0.1是最接近的表示,double并且0.1f是最接近的表示float

  • 只有BigDecimal完全相同.如果正确使用,其余的将在转换为String时给出正确的答案. (4认同)

kun*_*ora 6

浮动 fVariable = 12.3; 很好。但是当您在任何表达式中仅使用浮点值(没有任何标识符)时,您需要告诉编译器该值是浮点数,因此我们在值后使用后缀“f”。例子

浮动 fl = 13f/5f;

这里 13 和 5 是浮点值。