2015-06-24 30 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 - 對值爲0的整數進行平方後輸出1?

我的分配是很簡單 - 找到表面積和氣缸的體積,和輸出的精度應爲1,除非輸出小數將是0,在這種情況下不應該被打印的小數。

以上是我想出的(表面區域只是不同的變量)。如果第一行的輸出是-1,第二行應該是正值,0應該保持爲零(整數,所以不需要擔心時髦的東西)。

出於某種原因,當第一行輸出0時,第二行輸出1.是否有我在這裏失蹤的東西?

+3

你怎麼知道第一行輸出0? – user2357112

+0

另外,在什麼情況下,第一行可以輸出1? – user2357112

+2

可以請你發帖,當第一個值爲'0'時,你如何知道輸出是'1'?你怎麼知道第一個值是'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

好的傢伙感謝您的幫助,我想它了。出於某種原因,我認爲我的第一行可能會輸出1,但不會。取而代之的

decPlace_volume = pow(decPlace_volume,2);

轉換,我只是做了一個線decPlace_volume *= -1;

再次感謝!

相關問題