2015-04-02 92 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