c++值和变量之间的打印行为不同
c++ different print behavior between values and variables
我在mac上尝试了以下代码,结果对我来说有点奇怪。
float a = 2.225;
float b = 123.235;
printf("round: %.2f %.2f n", a, b);
printf("round: %.2f %.2f n", 2.225, 123.235);
输出:
round: 2.22 123.24
round: 2.23 123.23
g++——版本
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
印刷中的四舍五入规则是什么?如何在这两种情况下获得相同的打印结果?非常感谢。
第一个printf()
将float
值转换为double
,然后打印结果。注意,初始化将double
常数转换为float
。第二个直接传递double
值。您可以指定后缀为F
的float
常量,但由于默认的参数提升规则,C的规则仍然会在实际调用printf()
之前将这些float
常量转换为double
。
#include <stdio.h>
int main(void)
{
float a = 2.225;
float b = 123.235;
printf("round: %.2f %.2fn", a, b);
printf("round: %.2f %.2fn", 2.225, 123.235);
printf("round: %.2f %.2fn", 2.225F, 123.235F);
return 0;
}
输出:
round: 2.22 123.24
round: 2.23 123.23
round: 2.22 123.24
2.225
这是一个文本,类型为double
。
float a = 2.225;
这就是将double
分配给float
(失去精度,请参阅下文)。
printf( "%.2f", ... );
这是打印一个double
(即使由于类型提升而将float
作为参数传递),精确到小数点后两位数。
float a = 2.225;
printf( "%.2f", a );
这是将double
分配给float
,然后将其投射回double
(类型提升),并打印它。
printf( "%.2f", 2.225 );
这是在打印一个double
(不带来回铸造)。
印刷中的四舍五入规则是什么?
四舍五入正如你所期望的那样有效,但这不是你的问题。
输出的差异是因为您的a
和b
是float
,直接打印的文字不是。您碰巧选择了由于强制转换为浮点而导致精度损失的值。
如何在这两种情况下获得相同的打印结果?
始终如一地使用CCD_ 24。
double a = 2.225;
double b = 123.235;
相关文章:
- std::cout 在打印变量与函数表达式时的行为不同
- 面临在 if 语句之外打印变量数据的问题 完成使用 Qt 编程
- 如何在咖啡中Forward_gpu期间打印变量
- 如何使用类中的函数从 main 打印变量,帮助理解 OOP c++
- 当我在循环内打印变量时无限输出
- 如何打印变量的第一个输入/值?C
- gdb在选项卡完成的情况下打印变量时冻结
- 打印变量的地址
- 试图在C++中打印变量int会导致它崩溃.为什么?
- 有没有一种方法可以在Netbeans中的断点处打印变量的值
- 以十进制打印变量的地址
- WxWidgets 绘制文本以在屏幕上打印变量
- 尝试打印变量.程序崩溃
- 为什么 cout 不打印变量"C"外部?
- 串行打印变量在特定的时间间隔打印数组的大小,即使数组没有被使用
- 在#define中打印变量名
- 我们可以说cout只打印变量的第一个地址吗
- 不能在c++中打印变量a
- 如何使用内存地址打印变量的值
- 没有宏的c++简单反射:打印变量名及其值