十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
单纯用%f无法避免四舍五入。要避免四舍五入,需要自行编写函数。
创新互联公司是一家专注于成都网站建设、成都网站设计与策划设计,上杭网站建设哪家好?创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:上杭等地区。上杭做网站价格咨询:13518219792
实现方法有很多种,以常用两种举例说明:
1、
利用取整时,强制截取整数部分,取出要输出的整数部分和小数部分。
如保留三位小数,可以写作如下代码:
double v=123.456789;//要输出的数。
int a,b;//整数部分和小数部分。
a=(int)v;//取整,得到整数部分。
b=(int)((v-a)*1000);//得到三位小数部分。
printf("%d.%03d\n", a, b);//分别输出小数部分和整数部分。
2、先输出到字符串,然后截取需要长度的小数部分,并输出。与上例相同功能的代码如下:
double v=123.456789;//要输出的数。
int i;//用作计数。
char s[100];//字符串缓存。
sprintf(s, "%lf", v);//将v存到字符串中,执行后s="123.456789"。
for(i = 0; s[i]!='\0'; i ++)
if(s[i] == '.') break;//通过循环,找到小数点的位置。
s[i+4] = '\0'; //将小数点后第4位赋值为结束符,这样就实际保留了三位小数。此时s="123.456"
printf("%s\n",s);//输出结果。
有差别,第一个不会做四舍五入的,它精确的进行了计算,第二个是正确的,进行了舍运算,这个运算是在(int)的时候利用类型转换做的
如果你输出的结果是一样的,我怀疑是你在输出的时候指定了输出精度,你检查一下你的printf或者cout
题目要求的结果有个特性,就是1.4要当成1来看,1.8也要当成1来看。
其实就是要求,如果得到一个浮点数x,要得到结果的整型数据y(可兑换几张10元),y是小于或者等于x的最大整数(y = x MAX(y))。
那么可以定义一个宏(或者你也可以定义一个相同功能的函数),如下:
#define Round(x) (int)(x-0.5)
传入值x为浮点型,计算得到一个小于或者等于x的最大整数。
输出的时候以整型(%d)的格式输出,使得,若有16元,只能兑换1张10元。
或者你可能想要的结果跟上述说不太一样,你可能是想,我要兑换成1.6张10元的。那其实很简单,只要把输出格式换成"%2.1f"即可,表示显示2位有效数字(包括小数部分),其中只留有1位小数。那么显示结果就是1.6了
float a=2.556;printf("%.2f\n",a);%.2f的意思就是保留两位小数另外,%6.2表示,整个数的宽度(包括小数点)为6位,小数部分(不包括小数点)占两位.若整个数的宽度不足六位,则左边补空格;超过六位则忽略6.%-6.2f与上面的含义基本相同,只是当整个数的宽度不足六位时是右边补空格