2014-01-06 49 views
38

我想從負雙的絕對值 - 我認爲abs函數與java中一樣易於使用 - 但不是!如何從雙C語言中獲得絕對值

看來,abs - 函數返回一個int,因爲我有值3.8951和輸出爲3.000000

double d1 = abs(-3.8951); 
printf("d1: ...%lf", d1); 

我怎樣才能解決這個問題呢?那就是 - 我想要一個double的絕對值。

+9

你試過'晶圓廠(-3.8951)'? 'man abs'表示「計算一個整數的絕對值」,'fabs(3)'在「另請參見」中被交叉引用。永遠不要假設事物在不同的語言中以相同的方式工作。特別是因爲Java有類並且可以重載方法,但是C沒有。 – lurker

+0

@mbratch - 謝謝!!!!!!!!!!!!!!!我將在未來考慮這個問題 – user3155478

+0

abs僅針對C中的整數實現。這就是爲什麼答案都建議您使用晶圓廠,這是浮點等價物。 –

回答

58

使用fabs()(在math.h中)來獲得絕對值爲double:不是abs

double d1 = fabs(-3.8951); 
+3

因爲你比你贏得的黑客快得多。 – user3155478

+6

晶圓廠()是雙打。 fabsf()用於浮點數。 – nobism

+0

他們兩個都值得我的愛同樣。 – Sipty

11

使用fabs找到double(或float)絕對值數據類型。包含<math.h>標題爲fabs函數。

double d1 = fabs(-3.8951); 
5

值得一提的是Java可以重載方法如abs,使之與一個整數或雙工作。在C中,重載不存在,所以你需要不同的函數來處理整數與double。