实数截断式保留二位小数
实数截断式保留2位小数程序
问题描述 输入一个正的浮点数输出保留2位小数(不允许四舍五入)
输入形式 输入一个正的浮点数,以回车结束
输出形式 输出保留2位小数的结果
样例输入 3.1415926
样例输出 3.14
样例输入 2.677888
样例输出 2.67
案例展示
我相信很多人看到这个问题首先想到的便是自带的保留二位小数的操作。(包括我)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
double n;
scanf("%lf", &n);
printf("%.2lf", n);
}
这样输出3.14确实没有问题,但是输入为2.677888时,输出时2.68,不满足题目要求(不许四舍五入)。
编译器中自带的保留两位小数或者保留几位小数都是默认四舍五入的。所以这个思路行不通。
具体思路:
enmm,关于这个问题我去网上搜了一下,看到有大佬的思路是用字符串,将数字字符化,思路真的很巧妙(萌新瑟瑟发抖),大家可以去看一下,参考参考。但是,在这里我想到了另一种想法:
整体思路就是将浮点型数据的整数部分与小数部分分别进行输出,小数部分输出二位。
(1)输入浮点型数据。
(2)强制数据类型转换为整型,这样就可以得到输入的浮点数的整数部分。(注:浮点型强制转换为整型也是发生了截断,并不会四舍五入。)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
double n;
scanf("%lf", &n);
printf("%d", (int)n);
}
(3)由于题目要求保留二位小数,那么将所输入的浮点数减去整数部分再乘以100就会得到一个整数部分为两位数的浮点数,此时再次强制类型转换为整型就会得到一个两位数的整数。此时我们的想法便得到了。
(4)将两次得到的整型数据合在一起输出,中间用“.”隔开,就得到了我们想要的数据。
具体代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
double n;
int a, b;
scanf("%lf", &n);
a = (int)n;
b = (int)((n - a) * 100);
printf("%d.%d", a, b);
return 0;
}