C - 将值为0的整数平方输出1?

时间:2015-06-24 18:42:14

标签: c zero pow

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。

我的任务非常简单 - 找到圆柱体的表面积和体积,输出的精度应为1,除非输出小数为0,在这种情况下不应打印小数。

以上是我提出的(表面区域只是不同的变量)。如果第一行的输出为-1,则第二行应该为正,0应保持为零(整数因此不必担心时髦的东西)。

出于某种原因,当第一行输出0时,第二行输出1.这里是否有我遗漏的东西?

3 个答案:

答案 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

答案 1 :(得分:0)

  

除非输出小数为0,否则输出的精度应为1,在这种情况下,不应打印小数。

由于浮点的典型二进制实现,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);

答案 2 :(得分:0)

好的fellas感谢你的帮助,我明白了。出于某种原因,我认为我的第一行可以输出1,但它不会赢。而不是

decPlace_volume = pow(decPlace_volume,2);

转换,我刚为decPlace_volume *= -1;开了一行。

再次感谢!