sea*_*ley 4 c string format numbers
如何创建一个字符串,以便它将浮点数格式化为没有尾随的小数点或数字,当它是一个整数时,但不要切换到更大数字的科学记数法?
当我做:
float myFloat= 15.6f;
float myInt = 5.0f;
float myLarge = 7000000.0f;
sprintf(out, "my float is %g", myFloat);
sprintf(out, "my int is %g", myInt);
sprintf(out, "my large is %g", myLarge);
Run Code Online (Sandbox Code Playgroud)
我有类似的东西:
my float is 15.6 my int is 5 my large is 7e+07f
我想要一个单独的格式字符串,它将给出15.6,5和700000.
编辑原因评论不做格式化:
那正是我所想.但是包装器非常不方便,因为格式字符串嵌入在更长格式的字符串中:
sprintf(buf, "%d %g", myInt, myFloat);
Run Code Online (Sandbox Code Playgroud)
怎么包裹那个?
sprintf(buf, "%d %g", myInt, Wrapper(myFloat));??
Run Code Online (Sandbox Code Playgroud)
Wrapper应该返回什么?或者更糟:
sprintf(buf, "%d %s", myInt, Wrapper(myFloat));??
Run Code Online (Sandbox Code Playgroud)
Mik*_*ale 10
您可以使用"%.*f"进行格式化,这允许您将精度作为单独的参数传递给sprintf.我过去曾经用过这个,当我想要显示0,1,2或3位数时,没有额外的尾随0.编写一个小辅助函数,它接受double/float并返回一个整数精度(乘以1000然后进行模数10,100,1000).然后用"%.*f"调用sprintf,调用辅助函数,并传递浮点数.
我不认为你可以得到这个%g,因为%g给你更短的%e或%f.
所以,我认为没有一个printf论点可以满足你.对于15.6,你可以使用%2.1f; 对于7000000,你可以使用%7.0f.
你最好的选择可能是写一个包装函数来查看你的值的大小并应用正确的printf参数.