0

我看到一个用 C 语言编写的日历程序,它只是说100.而不是100.00. 该程序编译没有任何问题。

我的问题是这如何合法。C编译器不应该抱怨后面没有小数.吗?

提前感谢您的回答!

4

4 回答 4

12

因为语言标准的第 6.4.4.2 节"Floating constants"是这样定义它们的:

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

(您的“100.”将是一个有效的floating-constant,因为它由 adecimal-floating-constant组成fractional-constant(省略可选的exponent-partand floating-suffix);它digit-sequence后面是一个句点,该句点对 a 有效,fractional-constant因为该注意定义的第二行。)

于 2012-08-27T11:36:53.700 回答
3

不,对于双精度(和浮点)文字值,C 编译器不需要任何小数。

double d = 100.;
double d = 100.0;
double d = 100.000000;

都是合法的,并且代表与 100 相同的值double

于 2012-08-27T11:28:17.937 回答
0

它是合法有效的 C 程序。它是一个double.

于 2012-08-27T11:26:16.673 回答
0

因为当你放 '.' 你的 100 变成了编译器的两倍。你也看到 100。但编译器理解 100.00

于 2012-08-27T11:26:25.667 回答