C语言中 小数点前、后面的零怎么控制输出 比如,0.001-变为.001;200.00变为200;200.1不变。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中 小数点前、后面的零怎么控制输出 比如,0.001-变为.001;200.00变为200;200.1不变。相关的知识,希望对你有一定的参考价值。

注意这里的例子里面的数是不确定的,所以不能用%.3之类的控制,求高人教授!

你第一个是0.001- 是吗 变为 .001
第二个是200.00变为200
第三个是200.1 不变?

你到底是什么规律? 每次规律都不一样吗?

你至少该给个规则吧

比如

第一个 需要小数点后的三位 小数点前的不要

第二个 只要小数点前的

第三个 不变

思路就是很简单的 转换成字符串 根据需求 截取小数点前后指定的位数

你如果能把你的规则说清楚 我可以给你写出来追问

那个-是多余的,表示如果是小于1的数,不要输出小数点之前的0;第二种是如果是整数,不要输出小数点及之后的0;第三种表示,算了,第三种很简单。就是第一种和第二种啊,求!

追答

明白了 简单的说 就是那部分全部为0 就截去 不显示

Please input your num:0.00001
整数部分0小数数部分.00001
.00001
Press any key to continue

Please input your num:123.0000
整数部分123小数数部分.0000
123
Press any key to continue

Please input your num:123.01
整数部分123小数数部分.01
123.01
Press any key to continue

#include
#include
main()

int i=0,j=0;
char *p,num[50]="\0",zs[10]="\0",xs[10]="\0";
p=num;
printf("Please input your num:");
gets(num);
while (*p!=NULL)

printf("整数部分");
while (*p!='.')

printf("%c",*p);
zs[i++] = *p;
p++;

printf("小数数部分");
while (*p!=NULL)

printf("%c",*p);
xs[j++] = *p;
p++;


printf("\n");

if (atoi(zs) >0)
printf("%s",zs);
if (atof(xs)>0)
printf("%s",xs);
printf("\n");


困死了 可能思维混乱 写得有些复杂 不过实现了你的功能了

参考技术A CString A;
double M;
A.Format("%f",M);
if(M!=0)

A.TrimRight("0");
A.TrimRight(".");//这两句到达200.00变为200;200.1不变
A.TrimLeft("0");//到达0.001-变为.001的效果
//假如你只需要输出文本,那么直接输出A就行

TrimRight("0");的意思可以理解为从右开始删除把文本(CString)中0,当TrimRight没有遇到0时结束,但是当你写成TrimRight(".0");时,你会发现一样能达到取整数的目的,那是因为那时TrimRight从右开始删除把文本(CString)中"0"或者".",当TrimRight没有遇到"0"和"."时结束,但这样会让你没有办法输出10的倍数,因为"0"和"."是并列的,当你输出10的倍数时,TrimRight会先删除"."然后删除"0",所以你得不到10的倍数
参考技术B 自己写一个函数,根据数字的小数位数来输出 参考技术C 楼主 要的 这个结果?运行下 看看
#include<stdio.h>
main()

FILE *fp1,*fp2;

int i=0,j=1;
char str[100];
while(1)

printf("Please input your num:\n");
scanf("%s", &str);

for(i=0;i<strlen(str);i++)


if(str[i]!='0' )
break;



for(j=0;j<strlen(str);j++)


if(str[j]=='.' )

break;



if(j<strlen(str))

for(j=strlen(str)-1;j>=0;j--)


if(str[j]!='0' )

if(str[j]=='.' )
str[j]='\0';
str[j+1]='\0';
break;



printf("%s\n", str+i);


本回答被提问者采纳
参考技术D #include <stdio.h>
#include <string.h>

int main()

double x;
while(scanf("%lf",&x)!=EOF)

printf("%g\n",x);

return 0;


前面没有0的我做不到追问

你这个%g,我试过了,变成了科学计数法表示啊,怎么使那个正常化?求!

追答

那你就判断吧,看看小数点前面是不是0.如果是的话就输出
if(((int)x)==0)这个是判断小数点前面是不是0的

C语言中输出时怎样控制小数点后的位数,请举例说明保留1、2、3、4位小数等等,谢谢

参考技术A

在C的编程中,总会遇到浮点数的处理,有的时候,我们只需要保留2位小数作为输出的结果,这时候,问题来了,怎样才能让cout输出指定的小数点后保留位数呢?

在C语言的编程中,我们可以这样实现它:

[cpp] view plain copy

    printf("%.2f", sample);  

    在C++中,是没有格式符的,我们可以通过使用setprecision()函数来实现这个需求。

    想要使用setprecision()函数,必须包含头文件#include <iomanip>。使用方式如下:

    [cpp] view plain copy

    cout << "a=" << setprecision(2) << a <<endl;  

    这时候,我们会发现,如果a的值为0.20001,输出的结果为a=0.2,后面第二位的0被省略了。

    如果我们想要让它自动补0,需要在cout之前进行补0的定义。代码如下:

    [cpp] view plain copy

    cout.setf(ios::fixed);  

    cout << "a=" <<fixed<< setprecision(2) << a <<endl; //输出a=0.20  

    这样,我们就可以得到0.20了。当然,如果想要关闭掉补0,只需要对fixed进行取消设置操作。

    [cpp] view plain copy

    cout.unsetf(ios::fixed);  

    cout << "a=" << setprecision(2) << a <<endl; //输出a=0.2  

    我们的输出结果就又变回a=0.2了。

    参考代码

    [cpp] view plain copy

    #include <iostream>  

    #include <iomanip>  

    using namespace std;  

    int main()  

      

    float a = 0.20001;  

    cout.setf(ios::fixed);  

    cout << "a=" <<fixed<< setprecision(2) << a <<endl; //输出结果为a=0.20  

    cout.unsetf(ios::fixed);  

    cout << "a=" << setprecision(2) << a <<endl; //输出结果为a=0.2  

    return 0;  

      

以上是关于C语言中 小数点前、后面的零怎么控制输出 比如,0.001-变为.001;200.00变为200;200.1不变。的主要内容,如果未能解决你的问题,请参考以下文章

C语言小数点后面的0

EXCEL中小数点后面的0怎么去掉?比如2.000 我想把后面的0去掉,表格中几百个统一去掉

C语言如何用变量控制小数位数

关于用C语言求一个小数求小数点后面的位数多少的问题,求大神解答。

关于C语言小数点后多少位的问题

C语言编程求小数的最后一位