C-将一个整数与值0平方就是输出1?

C-将一个整数与值0平方就是输出1?,c,zero,pow,C,Zero,Pow,我的作业只允许使用stdio.h和math.h库 我的任务很简单——找到圆柱体的表面积和体积,输出的精度应该是1,除非输出的小数点是0,在这种情况下,小数点不应该被打印出来 上面是我对表面积提出的相同的东西,只是不同的变量。如果第一行的输出是-1,那么第二行应该使其为正,0应该保持为零整数,所以不需要担心那些古怪的东西 出于某种原因,当第一行输出0时,第二行输出1。这里有我遗漏的东西吗?您的问题是,如果小数点为0,则要抑制小数点,这里有一种方法 decPlace_volume = floor(v

我的作业只允许使用stdio.h和math.h库

我的任务很简单——找到圆柱体的表面积和体积,输出的精度应该是1,除非输出的小数点是0,在这种情况下,小数点不应该被打印出来

上面是我对表面积提出的相同的东西,只是不同的变量。如果第一行的输出是-1,那么第二行应该使其为正,0应该保持为零整数,所以不需要担心那些古怪的东西


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

您的问题是,如果小数点为0,则要抑制小数点,这里有一种方法

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
除非输出小数点为0,否则输出精度应为1,在这种情况下,不应打印小数点

由于浮点的典型二进制实现,OP的方法在接近0.01的倍数时会遇到问题。相反,post处理未更改卷的输出

使用snprintf


好了,伙计们,谢谢你们的帮助,我知道了。出于某种原因,我认为我的第一行可以输出1,但它不会。而不是

decPlace_体积=功率decPlace_体积,2

为了转换,我只为deplace_volume*=-1;做了一行


再次感谢

您如何知道第一行输出的是0?另外,在什么情况下第一行可以输出1?请您发布第一个值为0时您如何知道输出为1,以及您如何知道第一个值为0?deplace_volume与print语句的精度修饰符相关联,即printft volume为%.*f,德克斯库,体积,体积`首先,DECU卷的类型是什么?第二,在什么情况下,音量是负的,这是你得到a-1的唯一方法。第三,您如何确定任一点的deplace_体积值?您是否将其打印到终端,并在调试器中查看它,什么?
#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
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);