我正在尝试打印一个最多5个小数位的数字。
我有:
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
float a = 987.65;
float b = 1.23456789;
scanf("%f %f", &a, &b);
printf("%.5f %.5f", a, b);
return 0;
}
我得到的结果是987.65000和1.23456 我希望结果是987.65和1.23456,所以基本上我想在答案中最多5个,即<= 5个十进制数字。
答案 0 :(得分:4)
稍微不那么技术性的方法是使用setprecision
,如下所示:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float a = 987.65;
float b = 1.23456789;
cout << setprecision(5);
cout << a << " " << b << endl;
return 0;
}
输出:
987.65 1.2346
答案 1 :(得分:1)
根本问题是计算机无法准确表示大多数浮点数。
此外,您需要一个复杂的格式规则:如果结束数字为零,则打印空格。
问题是您的号码987.65000可能表示为98.6500001,因此不能使用您的格式规则。
我相信您必须编写自己的格式化功能才能实现您正在寻找的功能。
答案 2 :(得分:0)
这是一个可以满足您需求的解决方案:
#include <iostream>
#include <cstdio>
using namespace std;
unsigned int numPlaces = 5; //number of decimal places
unsigned int determinePlaces (float number) {
unsigned int myPlaces = 0;
while (number != (int)(number) && myPlaces<=numPlaces-1) {
number = number*10;
myPlaces++;
}
return myPlaces;
}
int main() {
float a = 987.65;
float b = 1.23456789;
printf("%.*f %.*f\n", determinePlaces(a), a, determinePlaces(b), b);
return 0;
}
输出:
987.65 1.23457
基本上,代码继续将山羊乘以10,直到转换为整数(基本上取底值)与浮点数匹配。如果它在达到第五次乘以10时没有,我们用printf
的5位小数来满足自己。否则,我们会打印匹配楼层值所需的金额。