2015-04-02 70 views
1

我試圖使用printf功能給出去的浮標變量的值負浮點數我只能用%d,這裏是我迄今所做的:的printf使用%d

............................. 
float var =0.0; 
// the value will set from another function 
var *= 100000; 
printf("X[%d.%04d] \n",(int)(var/100000),((int)var)%100000)); 
............... 

這正常工作與正的float值,但是當我得到消極的這個它會如何顯示:

爲:-0.4578 -> 0.-4578
,你可以說符號是不正確的地方,我的問題是否有辦法做到這一點,而不使用例如:switch case statemente或類似的東西? 在此先感謝!

+2

'value * = 100000;'....你的意思是'var * = 100000;' – 2015-04-02 09:51:42

+0

@Sourav對不起,對不起! – Engine 2015-04-02 09:52:59

+0

浮點文字被寫入(使用發佈代碼中的值)0.0f和10000.0f,沒有小數點的文字既不是float也不是double。一個帶小數點的文字,沒有結尾的'f'是一個double。 – user3629249 2015-04-02 21:22:44

回答

2

您可以通過使用不同的格式字符串爲正數和負數做到這一點:

char *format; 
int v = var * 100000; 
if (v < 0) { 
    format = "X[-%d.%04d] \n"; 
    v = -v; 
} else { 
    format = "X[%d.%04d] \n"; 
} 
printf(format, v/100000, v%100000); 

這樣v總是正的printf,和符號被嵌入到您傳遞的格式字符串。僅使用%d格式。

+0

@dasblinklight,謝謝你的回答,但是1個問題我只能用%d,所以沒有%s,%f%c等 – Engine 2015-04-02 09:51:56

+0

非常感謝你的幫助 – Engine 2015-04-02 09:59:49

+0

當然你的意思是'10000'在3個地方而不是' 100000'。 – chux 2015-04-02 14:51:41