C++科学输出数字后,e后面的0怎么控制?

youruquan 2014-02-27 09:41:24
就是cout<<setiosflags(ios::scientific)<<setprecision(3)<<1.457e-5<<endl;输出的结果是1.457e-005,我想把5前面的两个0去掉,请问如何修改呢?
改成setprecision(1),以后,输出的为1.5e-005,请问各位怎么修改呢?
...全文
1428 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-02-27
  • 打赏
  • 举报
回复
引用 3 楼 u013685578 的回复:
赵老师就是牛
蓝兔先生 2014-02-27
  • 打赏
  • 举报
回复
赵老师就是牛
赵4老师 2014-02-27
  • 打赏
  • 举报
回复
更保险的版本:防止将尾数带的正负号误以为指数带的正负号。
#include <stdio.h>
char *trime0(char *ss) {
    char *p;

    p=NULL;
    while (1) {
        if (p) {
            if (*p=='0') {p++;continue;}
            *ss=*p;
        }
        if (!*ss) break;
        if (!p) if ((*ss=='-' || *ss=='+') && *(ss-1)=='e') p=ss;
        ss++;
        if (p) p++;
    }
    return ss;
}
int main() {
    double d1=1.457e-5;
    double d2=-1.457e5;
    char s[20];

    sprintf(s,"%.3le",d1);
    printf("%s\n",s);
    trime0(s);
    printf("%s\n",s);

    sprintf(s,"%.3le",d2);
    printf("%s\n",s);
    trime0(s);
    printf("%s\n",s);

    return 0;
}
//1.457e-005
//1.457e-5
//-1.457e+005
//-1.457e+5
//
赵4老师 2014-02-27
  • 打赏
  • 举报
回复
活人不会被尿憋死!
#include <stdio.h>
char *trime0(char *ss) {
    char *p;

    p=NULL;
    while (1) {
        if (p) {
            if (*p=='0') {p++;continue;}
            *ss=*p;
        }
        if (!*ss) break;
        if (!p) if (*ss=='-' || *ss=='+') p=ss;
        ss++;
        if (p) p++;
    }
    return ss;
}
int main() {
    double d1=1.457e-5;
    double d2=1.457e5;
    char s[20];

    sprintf(s,"%.3le",d1);
    printf("%s\n",s);
    trime0(s);
    printf("%s\n",s);

    sprintf(s,"%.3le",d2);
    printf("%s\n",s);
    trime0(s);
    printf("%s\n",s);

    return 0;
}
//1.457e-005
//1.457e-5
//1.457e+005
//1.457e+5
//
youruquan 2014-02-27
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
更保险的版本:防止将尾数带的正负号误以为指数带的正负号。
#include <stdio.h>
char *trime0(char *ss) {
    char *p;

    p=NULL;
    while (1) {
        if (p) {
            if (*p=='0') {p++;continue;}
            *ss=*p;
        }
        if (!*ss) break;
        if (!p) if ((*ss=='-' || *ss=='+') && *(ss-1)=='e') p=ss;
        ss++;
        if (p) p++;
    }
    return ss;
}
int main() {
    double d1=1.457e-5;
    double d2=-1.457e5;
    char s[20];

    sprintf(s,"%.3le",d1);
    printf("%s\n",s);
    trime0(s);
    printf("%s\n",s);

    sprintf(s,"%.3le",d2);
    printf("%s\n",s);
    trime0(s);
    printf("%s\n",s);

    return 0;
}
//1.457e-005
//1.457e-5
//-1.457e+005
//-1.457e+5
//
解决了,谢谢了啊!
youruquan 2014-02-27
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
更保险的版本:防止将尾数带的正负号误以为指数带的正负号。
#include <stdio.h>
char *trime0(char *ss) {
    char *p;

    p=NULL;
    while (1) {
        if (p) {
            if (*p=='0') {p++;continue;}
            *ss=*p;
        }
        if (!*ss) break;
        if (!p) if ((*ss=='-' || *ss=='+') && *(ss-1)=='e') p=ss;
        ss++;
        if (p) p++;
    }
    return ss;
}
int main() {
    double d1=1.457e-5;
    double d2=-1.457e5;
    char s[20];

    sprintf(s,"%.3le",d1);
    printf("%s\n",s);
    trime0(s);
    printf("%s\n",s);

    sprintf(s,"%.3le",d2);
    printf("%s\n",s);
    trime0(s);
    printf("%s\n",s);

    return 0;
}
//1.457e-005
//1.457e-5
//-1.457e+005
//-1.457e+5
//
您这个事c语言的程序,c++的语言可以实现不?

65,190

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧