我的c ++项目需要处理行星质量的数量......超过24位数。它们是花车。相同的变量也可能是一个相对较小的数字(100)我尝试过使用double,而且很长,但在linux中使用G ++进行编译我收到警告:警告:
整数常量对于其类型[默认启用]而言太大。
此外,我的计算也不起作用。我想知道这种数字需要什么类型的变量。
我已经做过研究,但是它变得干涩......但是,如果这个问题经常发生,我很抱歉。谢谢!
答案 0 :(得分:3)
如果您有一段代码:
double mass = 31415926535892718281828459;
然后您需要了解常量是一个整数。整个声明会在将其放入double
之前将其变为mass
,但您的方案在之前
你需要告诉编译器它是一个双重直接的东西,如:
double mass = 31415926535892718281828459.0;
C++11
的第2.14节详细说明了文字及其定义方式。第一部分不是0
的一组数字由以下2.14.2 Integer literals
部分规则捕获:
decimal-literal:
nonzero-digit
decimal-literal digit
(以0
开头的一组数字仍然是一个整数,只有一个由八进制数字而不是十进制数字组成。)
部分2.14.4 Floating literals
显示如何指示编译器您想要double
,例如:
1.414
或15.
中的小数部分;或12e2
中的指数表示法。或者,那里的语言律师:
浮动文字由整数部分,小数点,小数部分,e或E,可选的有符号整数指数和可选的类型后缀组成。整数和分数部分都由一系列十进制(十进制)数字组成。可以省略整数部分或小数部分(不是两者);小数点或字母e(或E)和指数(不是两者)都可以省略。
浮点文字的类型是double,除非后缀明确指定。后缀f和F指定float,后缀l和L指定long double。
答案 1 :(得分:2)
你需要确保它是双倍的:
123456789012345678 // integer, give warning
123456789012345678.0 // double (floating point)
如果您需要额外的精度,则应考虑使用大量库。另请参阅C++ library for big float numbers
答案 2 :(得分:2)
这是一个产生此警告的简单测试用例:
float foo() {
return 1000000000000000000000000;
}
问题是那里写的数字实际上是一个整数字面值。此代码基本上是"将此值视为int
,将其转换为float
,并返回该值。"但这个数字太大而不适合int
。
解决方案:添加" .0"或" .0f"在数字的末尾,使其成为double
或float
字面而不是int
。