singlepost

Как сделать так,что бы программа,написанная на Visual Studio C вела вычисления с двумя знаками после запятой? << На главную или назад  

Win32 console application
Как сделать так,что бы программа,написанная на Visual Studio C вела вычисления с двумя знаками после запятой?
Вот сама программа, но она делает расчеты с 5ю знаками после запятой, а мне нужно, что бы именно с двумя! Заранее спасибо)

#include &lt;stdio.h&gt;

int main()
{
freopen(&quot;input.txt&quot;,&quot;r&quot;,stdin);
freopen(&quot;output.txt&quot;,&quot;w&quot;,stdout);
float x,p,m,y;
scanf (&quot;%f &quot;,&amp;x);
scanf (&quot;%f &quot;,&amp;p);
scanf (&quot;%f &quot;,&amp;m);

int i,k;
k=p/12;
y=x;
for (i=1;i&lt;=m;i++)
{
y=y+(y*k/100);
}

printf(&quot;%.2f&quot;,y);
return 0;
}

20 ответов в теме “Как сделать так,что бы программа,написанная на Visual Studio C вела вычисления с двумя знаками после запятой?”

  1. 20
    Константин Конашенков ответил:

    #include <stdio.h>

    int main()
    {
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    float p,m;
    int x, y;
    scanf ("%d ",&x);
    scanf ("%f ",&p);
    scanf ("%f ",&m);

    int i,k;
    k=p/12;
    y=x;
    for (i=1;i<=m;i++)
    {
    y=y+(y*k);
    }
    float result;
    result = result/100;
    printf("%.2f",result);
    return 0;
    }

    Если что, сори за оформление, ибо кодю на Java )

  2. 19
    Артём Девятов ответил:

    Вот)
    Спасибо большое, помогло)

  3. 18
    Пашка Джиоев ответил:

    Непонятно зачем это нужно, но насколько я понял следует после каждого умножения/деления производить округления до 2-х знаков после запятой. Напиши свою функцию round( float x), для округления, вроде такой:
    float round( float x) {
    return ((int)(x * 100.0 + 0.5)) / 100.0;
    }
    В теле цикла пиши:
    y = y + round( round( y * k) / 100);
    Если бы писал на плюсах, мог бы сделать свой класс округленных целых чисел и перегрузить операции для него, это позволило бы записывать арифметические выражения как обычно.

  4. 17
    Константин Конашенков ответил:

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

  5. 16
    Константин Конашенков ответил:

    Вашу формулу умножьте на 100, результат умножение сделайте типом int. А перед тем как выводить результат посчитайте его поделив на 100, но уже как float тип)

  6. 15
    Константин Конашенков ответил:

    Укажите строку, где именно округляется, возможно я не вижу

  7. 14
    Артём Девятов ответил:

    На выводе: printf("%.2f",y);

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

  8. 13
    Константин Конашенков ответил:

    А еще выше на ссылке, которую я дал написано
    "… Writes to the standard output (stdout) a sequence of data formatted as the format argument specifies. After the format parameter, the function expects at least as many additional arguments as specified in format."

    "Запись в стандартный выходной поток последовательности форматированный данных…."
    Где тут округление ?

  9. 12
    Артём Девятов ответил:

    Поясню поподробнее с момента, как мы попадаем в цикл:
    1й шаг) y= 1000.0000
    2) y= 1010.0000
    3) y= 1020.1000
    4) y = 1030.3010
    стоп.
    Мы рассматриваем 4 знака после запятой. И вот эти 10 десятитысячных в дальнейшем сделают вычисление неточным. Должно быть так
    1) y = 1000.00
    2) y= 1010.00
    3) y= 1020.10
    4) y = 1030.30

  10. 11
    Константин Конашенков ответил:

    Откройте учебник .. и прочитайте… у вас какой тип ??? Float, изучите с какой точностью получается результат ?? А калькуляторс какой точностью считает ??

    На сколько могу судить вам число округлили и вывели 2 знака после запятой,так же могли вывести и 10 знаков, тоже округленных. Прочитайте про типизацию языка C++.Такие вопросы и такая постановка задачи заставляет усомниться в вас, как в будущем программисте.

  11. 10
    Артём Девятов ответил:

    Кажется, вы меня не поняли.
    В данной программе (выше расписано) сначала идут вычисления, а потом они округляются до двух знаков после запятой. А нужно, что бы числа сначала округлялись и только потом вычислялись!

  12. 9
    Артём Девятов ответил:

    Теперь он выводит с двумя знаками после запятой, но расчеты-то делает не с двумя! Результат получается не точный(

  13. 8
    Константин Конашенков ответил:

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

  14. 7
    Артём Девятов ответил:

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

  15. 6
    Константин Конашенков ответил:

    на это же странице чуть выше

    %[flags][width][.precision][length]specifier

  16. 5
    Артём Девятов ответил:

    Да, это тоже верно) Исправил на %f

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

  17. 4
    Артём Девятов ответил:

    Как написано в задаче:
    Точность представления вещественных чисел – до второго знака после запятой.
    У меня ответ:1126.825195
    А должно быть:1126.84

  18. 3
    Константин Конашенков ответил:

    У вас форматированный вывод
    //www.cplusplus.com/reference/clibrary/cstdio/p...

    вместоd or i Signed decimal integer
    нужно f Decimal floating point

  19. 2
    Константин Конашенков ответил:

    дыкПочему форматированный вывод с помощью %d
    Читайте о типах и форматированном выводе

    P.s. А к чему уточнение, какая у вас Ide ?

  20. 1
    Артём Девятов ответил:

    В данном примере я юзал float

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.