在c ++中存在小数值时,格式化浮点值的输出

时间:2016-06-10 02:15:45

标签: c++ floating-point iomanip

我需要有关如何在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

2 个答案:

答案 0 :(得分:1)

假设你正在进行分裂。

  1. 使用cout
    i)如果小数部分变为.000000,则使用cout将仅打印整数(整数)部分。
    ii)如果小数部分不是.000000,那么cout也将打印小数部分。

    因此,在这两种情况下,cout都会导致您需要的行为。

  2. 使用printf()
    i)如果小数部分结果为.000000,则使用printf()将打印整数,然后是小数部分,例如3.000000。在这种情况下,您将手动处理它,以便仅将输出视为3。您可以遵循不同的方法,例如转换为字符串,使用内置函数等 ii)如果小数部分不是.000000,则printf()将打印输出,如3.123456

  3. 请参阅下面的代码。我使用的事实是,如果除法的余数为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

答案 1 :(得分:1)

您可以创建一个将float转换为仅一个小数位的函数。然后测试浮子是否等于其整数部分(即如果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
}