2011-04-08 63 views
0

在Ubuntu Linux 10.04上使用GCC,我在分割後有不需要的四捨五入。GCC分割截尾(舍入問題)

我想:

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

void FormatReading(int temp) 
{ 
    double reading = temp/100; 
    printf("%f\n",reading); /* displays 226.000000, was expecting 226.60 */ 
} 

int main(void) 
{ 
    FormatReading(22660); 
    return 0; 
} 

有人建議我嘗試:

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

void FormatReading(int temp) 
{ 
    long reading = temp ; 
    reading = reading/100; 
    printf("%3.2ld\n",reading); /* displays 226 */ 
} 

int main(void) 
{ 
    FormatReading(22660); 
    return 0; 
} 

我也試過:

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

void FormatReading(int temp) 
{ 
    long reading = temp ; 
    double reading2 = reading/100; 
    printf("%3.2f\n",reading2); /* displays 226.00 */ 
} 

int main(void) 
{ 
    FormatReading(22660); 
    return 0; 
} 

我還使用包括數學試圖全面功能。 h用編譯器tag -lm以各種方式,但沒有找到我正在尋找的東西。

任何幫助極大的讚賞。

最好的問候, 伯特

+1

[C中的整數除法的行爲是什麼?](http://stackoverflow.com/questions/3602827/what-is-the-behavior-of-integer-division-in-c) – 2011-04-08 12:55:07

+0

不是重複的@Steve。我不認爲OP知道他在做整數除法。我認爲他認爲'd =我/我'做了浮點分割。 – 2011-04-08 19:48:52

+0

@Rob:隨意選擇任何其他許多關於完全相同點的問題作爲更好的重複。我想我只是選擇了看起來像一場近距離比賽的第一場比賽,毫無疑問,「在我看來」受到了我知道答案的事實的影響。如果提問者沒有意識到他在做整數除法,那麼他現在確實:-) – 2011-04-09 20:24:05

回答

3

您正在使用整數除法總是給人整體的結果,而不是分數,然後將結果被分配給雙。除以100.0而不是100來獲得你想要的行爲。

+0

謝謝! - 伯特 – quadmore 2011-04-08 12:51:56

9
double reading = temp/100.0; 
          ^^ 

temp/100是一個整數除法 - 將結果賦值給double不會改變它。