我看到用C语言编写的日历程序只是100.
而不是100.00
。该程序编译没有任何问题。
我的问题是这是如何合法的。 C编译器不应该抱怨.
之后没有小数点吗?
感谢您的回答!
答案 0 :(得分:12)
因为语言标准的第6.4.4.2节,“浮动常数”,所以定义它们:
floating-constant:
decimal-floating-constant
hexadecimal-floating-constant
decimal-floating-constant:
fractional-constant exponent-part(opt) floating-suffix(opt)
digit-sequence exponent-part floating-suffix(opt)
hexadecimal-floating-constant:
hexadecimal-prefix hexadecimal-fractional-constant
binary-exponent-part floating-suffixopt
hexadecimal-prefix hexadecimal-digit-sequence
binary-exponent-part floating-suffix(opt)
fractional-constant:
digit-sequence(opt) . digit-sequence
digit-sequence .
exponent-part:
e sign(opt) digit-sequence
E sign(opt) digit-sequence
sign: one of
+ -
digit-sequence:
digit
digit-sequence digit
hexadecimal-fractional-constant:
hexadecimal-digit-sequence(opt) .
hexadecimal-digit-sequence
hexadecimal-digit-sequence .
binary-exponent-part:
p sign(opt) digit-sequence
P sign(opt) digit-sequence
hexadecimal-digit-sequence:
hexadecimal-digit
hexadecimal-digit-sequence hexadecimal-digit
floating-suffix: one of
f l F L
下面的全部以下是有效的浮点文字,意思是“零”:
0
0.0
0.0
(您的“100”将是有效floating-constant
,因为decimal-floating-constant
由fractional-constant
组成(省略可选的exponent-part
和floating-suffix
});它是一个digit-sequence
后跟一个句点,它对于fractional-constant
有效,就像该noteable定义的第二行一样。)
答案 1 :(得分:3)
不,对于double(和float)文字值,C编译器不需要任何小数。
double d = 100.;
double d = 100.0;
double d = 100.000000;
一切都是合法的,并且代表与double
答案 2 :(得分:0)
这是一个合法且有效的C程序。它是double
。
答案 3 :(得分:0)
因为当你把'。'你的100转为编译器的双倍。你也看到100.但编译器理解100.00