100法律如何?

时间:2012-08-27 11:23:09

标签: c

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

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

感谢您的回答!

4 个答案:

答案 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-constantfractional-constant组成(省略可选的exponent-partfloating-suffix });它是一个digit-sequence后跟一个句点,它对于fractional-constant有效,就像该noteable定义的第二行一样。)

答案 1 :(得分:3)

不,对于double(和float)文字值,C编译器不需要任何小数。

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

一切都是合法的,并且代表与double

相同的100值

答案 2 :(得分:0)

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

答案 3 :(得分:0)

因为当你把'。'你的100转为编译器的双倍。你也看到100.但编译器理解100.00