1
ggarlic 2014-09-23 17:53:53 +08:00 1
把你scanf里的%g换成%lf
原因: printf其实会类型提升 scanf不会 所以你在printf下写%f %g都一样,float会转为double 但是在scanf下,%g就是float,%lf才是double |
2
Plumes 2014-09-23 17:54:54 +08:00 1
scanf里面改成 %lg
%g 对应的是 float |
3
lisonfan OP @Plumes 你好,我还有一个疑问就是最后输出的结果只取小数点后面3位,第四位就会四舍五入。
int main(int argc, char *argv[]) { double r,h; double pai; double tj; pai=3.1415926535; printf("请输入半径:"); scanf("%lg",&r); printf("请输入高:"); scanf("%lg",&h); tj=pai*r*r*h; printf("体积:%g",tj); return 0; } |
7
ggarlic 2014-09-23 18:23:06 +08:00
你要小数点后几位?%.7lf 是小数点后7位
|
9
ggarlic 2014-09-23 18:59:38 +08:00 1
不能吧,想不到怎么搞
如果你想看最长的有效位数你可以使用ieee754的阶码的最长位数来显示 #include <float.h> printf("体积:%.*lf", DBL_DIG, tj); DBL_DIG就是阶码最长位数 然后你会看到最后一位数字总也不对,这你就得学习下计算机里数字怎么存储的了 Python里: In [1]: 0.1+0.1+0.1-0.2 Out[1]: 0.10000000000000003 |
10
LbyG 2014-09-23 20:12:50 +08:00
#include <iostream>
using namespace std; int main() { double a=1.567; a=int(a*100)/100.0; printf("%.2lf",a); return 0; } 这样就可以输出1.56了,不知道楼主是不是这个意思 |