仅在 c++ 中存在小数值时格式化浮点值的输出
Formatting output for floating-point values just when there is fractional values in c++
我需要有关如何在 C++ 中格式化输出以显示小数位(如果有)或显示整个整数(如果没有小数点可显示)的帮助。
it should show 95.7 // When there is decimal
it should show 90 // When there is no decimal
我写道:
cout << setprecision(1) << fixed;
它没有给我预期的输出。它不打印 90,而是打印 90.0
假设你正在执行除法。
使用cout
:
i) 如果小数部分变成 .000000
,那么使用 cout
将只打印整数(整数)部分。
ii) 如果小数部分不是 .000000
,那么 cout
也会打印小数部分。
因此,在这两种情况下,cout
都会导致您需要的行为。
使用 printf()
i) 如果小数部分是 .000000
,那么使用 printf()
将打印整数,然后是小数部分,例如 3.000000
。在这种情况下,您将必须手动处理它,以便获得 3
的输出。您可以采用不同的方法,例如转换为字符串、使用内置函数等。
ii) 如果小数部分不是.000000
,那么printf()
会打印出3.123456
.
这样的输出
请看下面的代码。我使用的事实是,如果除法的余数为 0,则表示小数部分为 .000000
,并在打印之前将数字转换为 int
。您可能必须使用上面指出的不同方法。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
double num1=270.0, num2=90.0;
cout<<num1/num2<<"\n"; //prints just 3
printf("%f\n", num1/num2); //prints 3.000000
if((int)num1%(int)num2==0) //means num1 is a multiple of num2. So decimal is .000000
printf("%d\n", (int)num1/(int)num2);
num2=91.0;
cout<<num1/num2<<"\n"; //prints 2.96703
printf("%f\n", num1/num2); //prints 2.967033
if((int)num1%(int)num2!=0)
printf("%f\n", num1/num2);
return 0;
}
现场演示 here.
您可以创建一个函数,将浮点数转换为仅小数点后一位。然后测试浮点数是否等于其整数部分(即如果 90.0 等于 90)则只打印整数部分,否则打印浮点数。
#include <iostream>
#include <math.h>
using namespace std;
void printFloat(float num) {
// convert num to properly rounded decimal with 1 decimal place
num = floor(num*10 + .5)/10;
// if the float equals the whole number, only show the whole number
if (num == (int)num)
cout << (int)num << endl;
else
cout << num << endl;
}
int main() {
float num1 = 90.0;
float num2 = 90;
float num3 = 90.00001;
float num4 = 95.7;
float num5 = 95.74;
float num6 = 95.75;
printFloat(num1); // prints 90
printFloat(num2); // prints 90
printFloat(num3); // prints 90
printFloat(num4); // prints 95.7
printFloat(num5); // prints 95.7
printFloat(num6); // prints 95.8
}
我需要有关如何在 C++ 中格式化输出以显示小数位(如果有)或显示整个整数(如果没有小数点可显示)的帮助。
it should show 95.7 // When there is decimal
it should show 90 // When there is no decimal
我写道:
cout << setprecision(1) << fixed;
它没有给我预期的输出。它不打印 90,而是打印 90.0
假设你正在执行除法。
使用
cout
:
i) 如果小数部分变成.000000
,那么使用cout
将只打印整数(整数)部分。
ii) 如果小数部分不是.000000
,那么cout
也会打印小数部分。因此,在这两种情况下,
cout
都会导致您需要的行为。使用
printf()
i) 如果小数部分是.000000
,那么使用printf()
将打印整数,然后是小数部分,例如3.000000
。在这种情况下,您将必须手动处理它,以便获得3
的输出。您可以采用不同的方法,例如转换为字符串、使用内置函数等。
ii) 如果小数部分不是.000000
,那么printf()
会打印出3.123456
. 这样的输出
请看下面的代码。我使用的事实是,如果除法的余数为 0,则表示小数部分为 .000000
,并在打印之前将数字转换为 int
。您可能必须使用上面指出的不同方法。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
double num1=270.0, num2=90.0;
cout<<num1/num2<<"\n"; //prints just 3
printf("%f\n", num1/num2); //prints 3.000000
if((int)num1%(int)num2==0) //means num1 is a multiple of num2. So decimal is .000000
printf("%d\n", (int)num1/(int)num2);
num2=91.0;
cout<<num1/num2<<"\n"; //prints 2.96703
printf("%f\n", num1/num2); //prints 2.967033
if((int)num1%(int)num2!=0)
printf("%f\n", num1/num2);
return 0;
}
现场演示 here.
您可以创建一个函数,将浮点数转换为仅小数点后一位。然后测试浮点数是否等于其整数部分(即如果 90.0 等于 90)则只打印整数部分,否则打印浮点数。
#include <iostream>
#include <math.h>
using namespace std;
void printFloat(float num) {
// convert num to properly rounded decimal with 1 decimal place
num = floor(num*10 + .5)/10;
// if the float equals the whole number, only show the whole number
if (num == (int)num)
cout << (int)num << endl;
else
cout << num << endl;
}
int main() {
float num1 = 90.0;
float num2 = 90;
float num3 = 90.00001;
float num4 = 95.7;
float num5 = 95.74;
float num6 = 95.75;
printFloat(num1); // prints 90
printFloat(num2); // prints 90
printFloat(num3); // prints 90
printFloat(num4); // prints 95.7
printFloat(num5); // prints 95.7
printFloat(num6); // prints 95.8
}