Добавить запятые в числовой вывод в C?(т. е. объем производства составляет 12345,67 долл. США, он должен составлять 12 345,67 долл. США) - PullRequest
1 голос
/ 07 февраля 2011

При выводе числа его нужно разделять через каждые 3 числа запятой. Я не могу использовать какие-либо продвинутые методы или добавлять дополнительные библиотеки / использовать массивы и все такое, просто супер простые вещи, так как наш профессор еще не научил нас этому.

Есть ли способ сделать это, используя деление модуля? Я пытался некоторое время: (

#include <stdio.h>

   /* Define Tax rates per range */

   #define TAX_RATE_COLUMN1 .15
   #define TAX_RATE_COLUMN2 .22
   #define TAX_RATE_COLUMN3 .26
   #define TAX_RATE_COLUMN4 .29

   /* Define base amounts that are substracted from the taxable income per range*/

   #define BASE_AMOUNT_COLUMN1 40970.00
   #define BASE_AMOUNT_COLUMN2 81941.00
   #define BASE_AMOUNT_COLUMN3 127021.00

   /* Define tax on the base amount per range */

   #define TAX_BASE_AMOUNT_COLUMN1 6146.00
   #define TAX_BASE_AMOUNT_COLUMN2 15159.00
   #define TAX_BASE_AMOUNT_COLUMN3 26880.00

main()
{

   /* Variable declaration as floats */

   float federalTax, taxableIncome; 

    printf("~~~ Canadian Federal Tax Calculation for 2010 ~~~\n");
    printf("Enter Taxable Income ==> ");
    scanf("%f", &taxableIncome);

   /* Statements to calculate the federal tax on taxable income based on the 
   range of the users input */

    if (taxableIncome < 0) {
       printf("ERROR: Taxable Income cannot be negative.\n");
       }
    else if (taxableIncome >=0 && taxableIncome <=40970) {
       taxableIncome = taxableIncome * TAX_RATE_COLUMN1;
       federalTax = taxableIncome;
       printf("Federal Tax is $%.2f\n", federalTax);
       }
    else if (taxableIncome > 40970 && taxableIncome < 81941) {
       taxableIncome = taxableIncome - BASE_AMOUNT_COLUMN1;
       taxableIncome = taxableIncome * TAX_RATE_COLUMN2;
       taxableIncome = taxableIncome + TAX_BASE_AMOUNT_COLUMN1;
       federalTax = taxableIncome;
       printf("Federal Tax is $%.2f\n", federalTax);
       }
    else if (taxableIncome >= 81941 && taxableIncome <= 127021) {
       taxableIncome = taxableIncome - BASE_AMOUNT_COLUMN2;
       taxableIncome = taxableIncome * TAX_RATE_COLUMN3;
       taxableIncome = taxableIncome + TAX_BASE_AMOUNT_COLUMN2;
       federalTax = taxableIncome;
       printf("Federal Tax is $%.2f\n", federalTax);
       }
    else if (taxableIncome > 127022) {
       taxableIncome = taxableIncome - BASE_AMOUNT_COLUMN3;
       taxableIncome = taxableIncome * TAX_RATE_COLUMN4;
       taxableIncome = taxableIncome + TAX_BASE_AMOUNT_COLUMN3;
       federalTax = taxableIncome;
       printf("Federal Tax is $%.2f\n", federalTax);
    }

}

Ответы [ 4 ]

1 голос
/ 07 февраля 2011

Предполагается, для простоты, что нужна только одна запятая, т.е. , без значений выше $ 999 999,99.

Далее, давайте разделим это на целую и дробную часть:

float value = 123456.75f;
int integer_part = (int) value;
float fractional_part = value - integer_part;

Теперь для вставки запятых: integer_part % 1000 даст 456;integer_part / 1000 даст 123;fractional_part будет 0,75.

Преобразование этого в код - ваше задание.

1 голос
/ 07 февраля 2011

Забудьте C и попробуйте сделать это с математикой.

Я вижу, вы пытались использовать оператор модуля - это дает остаток. Как бы вы получили остаток от 10/6, если бы у вас не было оператора модуля?

Учитывая число 12345, как вы "извлекаете" только последнюю цифру (5)? ​​

Как извлечь последние 3 цифры, 345?

Как вы извлекаете первые 2 цифры, 12?

1 голос
/ 07 февраля 2011

Простейшим способом было бы преобразовать его в строку (я предполагаю, что запятые - это когда вы показываете цифры пользователю).

В основном вы делаете это следующим образом:
1) Преобразуйте число встрока.
2) Простой цикл над строкой и вставьте запятую pr 3 char.

0 голосов
/ 07 февраля 2011

Когда вы используете printf, вы должны использовать $%,.2f

Обратите внимание на запятую, которую я добавил. Надеюсь, это не считается продвинутой техникой, потому что вы уже используете printf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...