2014-10-19 2 views
-3

Итак, моя программа работает и компилирует, она делает то, что я прошу. Но выход моей программы имеет эти конечные нули, которые я хотел бы устранить. Не похоже, чтобы это беспокоило меня, но я определенно хотел бы, чтобы он немного почистил. Если бы кто-нибудь мог дать мне небольшое представление о том, как устранить задние нули вашей помощи, был бы очень благодарен.удалить завершающие нули с вывода

#include "stdafx.h" 
#include "stdio.h" 
#define BPR 10  // Basic Pay Rate is $10.00/hr. 
#define OTPR 15  // Over Time is time and a half. 
#define OT 40  // Overtime is after 40 hours. 
#define RATE1 .15 // Tax Rate 15%. 
#define RATE2 .20 // Tax Rate 20%. 
#define RATE3 .25 // Tax Rate 25%. 
#define LIMIT1 300.00 // The first 300.00. 
#define LIMIT2 200.00 // 200 after the first 300. 

int main(void) 
{ 
    int hours; 
    double tax; 
    double gross; 
    double taxes1=0,taxes2=0,taxes3=0; 
    double net; 
    double hold1=0,hold2=0,hold3=0; 

    printf("Please enter hours worked: "); 
    scanf_s("%i", &hours); 
     if(hours < OT) 
      gross=hours*BPR; 
     else 
     gross=((hours-OT)*OTPR+(OT*BPR)); 

    if(gross > LIMIT2 && gross < LIMIT1) 
     taxes1=gross*RATE2, hold1=gross-taxes1; 
    if(gross > LIMIT1) 
     taxes2=gross*RATE1, hold2=gross-taxes2; 
    if(gross < LIMIT2) 
     taxes3=gross*RATE3, hold3=gross-taxes3; 
    if(gross > 0) 
    { 
     net=(hold1+hold2+hold3); 
     tax=(taxes1+taxes2+taxes3); 
    } 

    printf("Your Net Pay is %f\n", net); 
    printf("Your Gross Pay was %f\n", gross); 
    printf("Your Taxes paid are %f\n", tax); 



    return 0; 
} 

если 65 был поставлен в течение часов с переменным выходным будет гласить:

Вашей чистая зарплата 828,750000

Вашего Gross Pay был 975,000000

Ваших налогов уплаченных 146,250000

как вы можете видеть, есть много нулей, которые я бы хотел исчезнуть, пожалуйста, помогите?

+3

Это действительно случай rtfm. В форматах Printf есть много вариантов, и любая текстовая книга или справочная страница объяснят вам их. –

+1

Также (хотя и не тот вопрос, который вы задали), ваш расчет сверхурочных неправильный, возможно. Если вы работаете более 40 часов, то в соответствии с вашим кодом вы получаете сверхурочную работу во все часы работы, а не только на тех, кто старше 40 лет. –

+0

Да, я понял, что и приступив к решению этой проблемы сейчас, спасибо за то, что вы также указали, что вне. – ChrisHoward

ответ

4

Использовать %.2f в качестве выходного формата.

+0

Действительно, убедитесь, что вы прочитали аргументы 'printf' (и другие функции): http://www.cplusplus.com/reference/cstdio/printf/ – SolarBear

+2

% .2f устанавливает максимальное количество цифр после точки , он удалит другие ненулевые цифры из результата (вы получите неверный результат), и если у вас не останется не менее двух цифр после точки, у вас все еще будут дополнительные нули. – zoran404

+0

@ zoran404 Согласитесь, «это устранит другие цифры, отличные от нуля», но тогда и большинство распечаток номеров FP. Пример: 'printf ("% f ", 0.123)' печатает "0.123". При типичном FP ​​точный результат больше похож на «0.122999 ... 9999822 ... (около 50 цифр)». Таким образом, округление до двух знаков после запятой приводит к тем же проблемам по умолчанию, что и десятизначные числа по умолчанию. – chux

2

Вы можете указать, сколько позиций вы хотите отобразить после десятичной точки, используя . с последующим числом позиций между % и f как так: printf("Your Net Pay is %.2f\n", net);. Существуют и другие параметры форматирования, которые можно использовать с спецификаторами формата, и вы можете прочитать их больше на страницах руководства, выполнив man printf, поскольку printf - это не просто функция C.