精华内容
下载资源
问答
  • c语言double类型printf问题

    万次阅读 多人点赞 2018-10-03 11:32:10
    结论:在c语言中,double类型的读入必须用"%lf";输出必须用"%f" 解释:double和float的精度是不同的,故存储空间也是不同的,所以如果要读入double类型,必须要用%lf来读入,以免精度丢失。而输出,由于...

    背景:今天在用c语言写程序时遇到了一个问题:printf("%lf",double(r));竟然输出乱码(0.000000),浏览了几十个网页之后,大致找到了问题原因。

    结论:在c语言中,double类型的读入必须用"%lf";输出必须用"%f"

    解释:double和float的精度是不同的,故存储空间也是不同的,所以如果要读入double类型,必须要用%lf来读入,以免精度丢失。而输出,由于printf中并无对%lf的严格定义,故使用%lf不一定会出现正确结果。那使用%f输出又如何呢?由于c语言中的默认参数提升规则%f输出的不论是float还是double都会被提升到双精度进行输出,并不会有精度丢失。

    如果使用C++编译器,那么用%lf输出是正确结果,如果是g++编译器,则是会输出错误结果,所以尽量使用%f输出double类型。

    如需更详细解释,请移步C语言官网查看printf详细使用规则。

    展开全文
  • 在编写c primer plus的课后程序题的时候遇到了问题:c语言的double类型printf %lf  显示0.00000。。 于是在网上找到了答案。。 转自:http://book.51cto.com/art/200901/106880.htm 问:有人告诉我不能在...

    在编写c primer plus的课后程序题的时候遇到了问题:c语言的double类型printf %lf  显示0.00000。。

    于是在网上找到了答案。。


    转自:http://book.51cto.com/art/200901/106880.htm


    问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢?

    答:printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。参见问题15.2。

    对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。

    下表列出了printf和scanf对于各种格式说明符可以接受的参数类型。

    格式

    printf

    scanf

    %c

    int

    char *

    %d, %i

    int

    int *

    %o, %u, %x

    unsigned int

    unsigned int *

    (续)

    格式

    printf

    scanf

    %ld, %li

    long int

    long int *

    %lo, %lu, %lx

    unsinged long int

    unsigned long int *

    %hd, %hi

    int

    short int *

    %ho, %hu, %hx

    unsigned int

    unsigned short int *

    %e, %f, %g

    double

    float *

    %le, %lf, %lg

    n/a

    double *

    %s

    char *

    char *

    %[...]

    n/a

    char *

    %p

    void

    void **

    %n

    int *

    int *

    %%

    none

    none


    (严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。)
    展开全文
  • int float 和double类型有的初学者分不清在在printf输出时用什么占位符,下面我简单介绍一下这些。 1.int型 int为“整数类型”,占用4个字节存储空间,是程序中最常见的一个类型,取一个数中的整数部分。输入和输出...

    int float double型 printf输出规则
    int float 和double类型有的初学者分不清在在printf输出时用什么占位符,下面我简单介绍一下这些。
    1.int型
    int为“整数类型”,占用4个字节存储空间,是程序中最常见的一个类型,取一个数中的整数部分。输入和输出时占位符用“%d”,例如:

    int a;//a为整数,如:2,4567,-2,-234;
    scanf("%d",&a);
    printf("%d",a);
    

    2.float型
    float为“单精度浮点数”,占用4个字节存储空间,他最多有7位十进制有效数字,如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会四舍五入,一般表示小数点后6位。输入和输出时占位符用“%f”,例如:

    float a;//a为浮点数,例如:3.1215726
    scanf("%f",&a);
    printf("%f",a);
    

    3.double型
    double为“双精度浮点型”,占用8个字节存储空间,用来表示带有小数部分的实数,输入和输出时占位符用“%lf”。它理论上保证16位有效数字,但是double类型在默认情况下,输出小数点后6位,要是需要更精确一点用“%m.nlf”的形式,其中m和n都是正整数。m表示输出浮点数的数据占m位,如果实际长度不等于m,就按实际长度输出,n表示输出的小数点后位数,所以m可以不用管,直接不写就行。比如“.2lf”就表示小数点后保存两位。

    double a=3.123243254354567;
    printf("%.14lf",a);
    

    附程序截图:
    在这里插入图片描述

    展开全文
  • 对于printf函数来说,输出一个double类型的参数,只需要%f即可,并不需要%lf,输出精度会在函数内处理,并不会丢失。 而对于scanf函数来说,读取一个double类型的参数,是需要%lf的修饰,如果使用%f读取,则它的精度...

    对于C语言来说,浮点数类型有两种,doublefloat,而double类型比float类型的精度要高,换句话说就是前者位数多。

    C语言中编译器会遵从C语言标准规范的设计,而编译器内部会有整形提升隐式类型转换,至于细节请查看编译器相关的设计。

    对于printf函数来说,输出一个double类型的参数,只需要%f即可,并不需要%lf,输出精度会在函数内处理,并不会丢失。
    而对于scanf函数来说,读取一个double类型的参数,是需要%lf的修饰,如果使用%f读取,则它的精度会丢失

    综上:printf输出double类型,使用%f即可;而scanf读取double类型,必须使用%lf防止精度丢失。

    展开全文
  • 背景:今天在用c语言写程序时遇到了一个问题:printf("%lf",double(r));竟然输出乱码(0.000000),浏览了几十个网页之后,大致找到了问题...结论:在c语言中,double类型的读入必须用"%lf";输出必须用"%f" ...
  • double f=3.1415926; printf("%lf\n",f); return 0; } 发现输出为0.000000 书上说c99标准允许printf函数可以使用%lf,并且codeblocks也勾选了-std=c99,但是为何还会输出0.000000呢? 附件图片是...
  • double类型的输入与输出

    千次阅读 2019-12-07 21:19:19
    scanf()用%lf 来接受double类型 printf()用 %f 输出double 类型 原因: printf的% f 说明符的确可以输出float类型也可以 输出double 类型 。根据“ 默认参数提升” 规则,float 型会被提升为double 类型。 对于scanf...
  • scanf使用%lf控制double类型输入,printf应该使用%f控制输出 栗子: #include<stdio.h> int main(){ double e, m, p, c, avg, sum; printf("输入你的英语,数学,物理,化学成绩: \n"); scanf("%lf %lf %lf...
  • 一、 C++ double类型用 %lf 格式输出 【输出错误】:-0.000000 二、 C++ double类型用 %f 格式输出【输出正确】 三、 C语言 double类型用 %lf 或 %f 格式输出 【均输出正确】 这让我感到十分玄学,为什么第一种输出...
  • 需要打印输出的变量类型double,scanf()和printf()均使用占位符%lf: #include <stdio.h> #include <math.h> int main() { double base; double height; double hypotenuse; scanf("%lf%lf", &...
  • double a=11111*11111; doube b=111111111*111111111; double c=11个1*11个1; ``` 三者输出如下: ![图片说明](https://img-ask.csdn.net/upload/201412/28/1419763525_139585.jpg) 为什么会这样? ...
  • 对于double类型的变量,printf()中的说明符可以用%f或%lf,而scanf()中的说明符则只 能用%lf; 对于long double类型的变量,printf()中的说明符可以用%f或%lf,而scanf()中的说明符 则只能用%lf。     关注我的新
  • 以前都一直以为printf输出double类型使用的是%lf,今天才发现输出float和double使用的都是%f。这让我很是迷惑。因为printf是变参函数,参数的入栈和出栈都是由被调用者完成。printf识别各个参数完全是通过输出格式...
  • 方法一:直接在工程中添加以下代码,然后那个c文件要... 即可使用printf/**************加入以下代码,支持printf函数,而不需要选择use MicroLIB***************/ #if 0 #pragma import(__use_no_semihosting) st...
  • [size=18px]例如: #include <iostream> #include <stdio.h> using namespace std;... double x = 1.23;... printf("%lf\n" , x); return 0; } 输出是:0.000000[/size]
  • 作为一个非科班出生的老维修工,平时的爱好就是学学电路,编编程,不够专业,主要是自己本来就就喜欢捣鼓电子类的玩意,再加上玩游戏技术太差, 所以基本上下闲余时,除了家人,就是和电脑相伴。...
  • 我寻思着double类型不应该用%lf输出吗 经过搜索查找资料发现 double类型输入用%lf,输出用%f CPlusPlus上没有%lf的定义,简直暴毙。。。 printf("%.2f\n", binary_search(max)); 另外一点,对于精度的把握可以...
  • 为什么printf()用%f输出double型,而scanf却用%lf呢? 答:printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型...
  • 1 printf输出float和double都可以用%f,double还可以用%lf。 2 scanf输入float用%f,double输入用%lf,不能混用。 转载于:...
  • 1、float 输入 scanf("%f",&a) float输出 printf("%f",a) 2、double 输入 scanf("%lf",&a) double 输出 printf("%f",a);
  • C语言double类型与int类型的转化;

    千次阅读 2019-01-26 13:50:36
    #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; main() { int a = 3;... //将int型的数值a转化为double类型的b c = (int)d; //将double类型的数值d转化为int型的c printf...
  • C语言中,输出double类型(双精度实型)以及float类型(单精度实型)时,默认输出6位小数(不足六位以 0 补齐,超过六位按四舍五入截断)。 double a = 1; printf("%lf\n", a); 输出会是: 1.000000 但是有时六位会...
  • double类型的输出方式

    万次阅读 2017-01-18 23:30:10
    摘自歌本哈根的冬天ChinaUnix博客关于double类型的输入/输出格式  double (双精度浮点型)类型是C语言的基本类型之一,占有8个字节最大可以表示到1.7*10^308,一般情况下,都可以满足程序的需要。  double ...
  • C语言double类型取余操作

    千次阅读 2020-05-12 11:24:28
    double类型的无法使用 解决: float使用fmodf(a,b); double使用fmod(a,b); long double使用fmodl(a,b); #include "stdio.h" #include "math.h" int main(){ double a=73.263,b=0.9973; printf("%g",fmod(a,b)); ...
  • double a; scanf("%f",&a); //应用scanf("%lf",&...而在输出double类型时却可以用%f,这是因为printf("%f",a);在执行时C自动将float型的参数转换成double型。 故double型的输入输出形式如下: double a...
  • double类型数据初始化

    千次阅读 2016-08-31 11:58:50
    看ffmpeg代码,但到有把double类型的数据初始化为NAN,百度一下,NAN: Not A Number。 NAN定义在#include 。 下面直接帖代码介绍一下NAN的应用 double d = NAN; printf("d = %f\n", d); if (isnan(d)) { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,371
精华内容 548
关键字:

double类型printf