2015-06-24 2 views
-3
decPlace_volume = floor(volume+.05) - ceil(volume); //should output -1, 0, or 1 
decPlace_volume = pow(decPlace_volume,2); //should the above == -1, this should turn it into 1 while making 0 remain 0 

Разрешенные библиотеки для моего назначения - это stdio.h и math.h.C - Squaring целое число со значением 0 выводит 1?

Мое назначение довольно просто - найдите площадь поверхности и объем цилиндра, а точность вывода должна быть 1, если выходной десятичный символ не будет 0, и в этом случае десятичная метка не должна печататься.

Выше было то, что я придумал (то же самое для площади поверхности только разные переменные). Если вывод первой строки равен -1, вторая строка должна сделать ее положительной, а 0 должна оставаться равной нулю (целое число, поэтому не нужно беспокоиться о фанки).

По какой-то причине, когда первая строка выводит 0, вторая строка выводит 1. Что-то мне здесь не хватает?

+3

Откуда вы знаете, что первая строка выводит 0? – user2357112

+0

Кроме того, в каком случае первая строка может выводить 1? – user2357112

+2

Можете ли вы сообщить, как вы знаете, что вывод «1», когда первое значение «0», и откуда вы знаете, что первое значение «0»? –

ответ

0

Ваш вопрос просит, чтобы подавить десятичной, если это будет 0, вот один из способов сделать это

#include<stdio.h> 
#include<string.h> 

int main() 
{ 
    char buffer[25]; 
    double volume; 

    volume = 1.234; 
    sprintf (buffer, "%.1f", volume);  // convert to string with 1 place 
    if (strstr(buffer, ".0") != NULL)  // examine string 
     sprintf (buffer, "%.0f", volume); // redo the string with 0 places 
    printf ("Volume = %s\n", buffer); 

    volume = 1.01; 
    sprintf (buffer, "%.1f", volume); 
    if (strstr(buffer, ".0") != NULL) 
     sprintf (buffer, "%.0f", volume); 
    printf ("Volume = %s\n", buffer); 

    return 0; 
} 

выход программы:

Volume = 1.2 
Volume = 1 
0

точность выходного сигнала должна быть 1, если выходной десятичный символ не будет 0, и в этом случае десятичное значение не должно печататься.

Подход OP связан с проблемами около кратных 0.01 из-за типичной двоичной реализации плавающей запятой. Вместо этого пост-обрабатывает вывод неизмененного volume.

Использование snprintf()

double volume = foo(); 
char buffer[100]; 
buffer[0] = 0; 
int len = snprintf(buffer, sizeof buffer, "%.1f", volume); 
if (len > 0 && buffer[len-1] == '0') buffer[--len] = '\0'; 
puts(buffer); 
+1

удалил мои комментарии. –

0

Alright Fellas спасибо за помощь, я понял это. По какой-то причине я думал, что моя первая строка может выводить 1, но это не так. Вместо

decPlace_volume = pow(decPlace_volume,2);

конвертировать, я только что сделал линию для decPlace_volume *= -1;.

Еще раз спасибо!

Смежные вопросы