我有一个浮点数组,其中数据存储在不同的小数点,所以有些是123.40000
,123.45000
,123.45600
...现在如果我想打印这些值在字符串中没有0在printf()
结束,因此它们是123.4
,123.45
,123.456
,最后没有那些0。这可能吗?如果是这样,怎么样?在printf()中的浮点格式化
8
A
回答
18
使用%克格式化:
printf("%g", 123.4000);
打印
123.4
尾随零被除去,但不幸的是这样是后小数点如果小数部分是零。我不知道是否真正有做你想要直接使用的是什么的printf()的任何方式 - 我觉得这样的事情可能是你最好的选择:
#include <stdio.h>
#include <math.h>
void print(FILE * f, double d) {
if (d - floor(d) == 0.0) {
fprintf(f, "%g.", d);
}
else {
fprintf(f, "%g", d);
}
}
int main() {
print(stdout, 12.0);
print(stdout, 12.300);
}
0
使用%G -
打印无论是正态还是指数形式的双重数据,无论哪一种更适合其数量级。 'g'使用小写字母,'G'使用大写字母。该类型与定点符号略有不同,因为不包括小数点右侧不显着的零。另外,小数点不包含在整数中。
+0
只是一个小的查询,如果我想删除尾部零但想保留整数的小数点,如124.00000是123,该怎么办? – sfactor 2009-12-07 23:45:33
3
我不知道如何哈克这不过是:
float f = 124.000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
返回124.0
。
float f = 124.123000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
返回124.123
。
0
打印到(足够大)缓冲区。打印缓冲区......如果缓冲区中没有'.'
,则打印一个点。
char buf[100];
sprintf(buf, "%g", val);
printf("%s", buf);
if (strchr(buf, '.') == NULL) putchar('.');
编辑
该标准规定了#
标志:
#结果被转换为``替代形式 ''。 [...]对于a, e,E,f,F,g和G转换,转换浮点数 的结果始终包含一个小数点字符,即使没有数字后面跟着 。 [...]对于g和G转换,结果不会从 中删除尾部零。 [...]
...但你的尾随零:(
相关问题
- 1. printf浮点值的字符串格式
- 2. C++浮点格式化
- 3. 格式化浮点值
- 4. TCL格式化浮点
- 5. 格式化浮点数
- 6. 格式化SLF4J中的浮点数
- 7. LCC的printf浮点
- 8. C printf格式化
- 9. 的Java printf的帮助中格式化
- 10. 浮点格式
- 11. printf和格式化规则
- 12. Printf格式化小数位
- 13. 我可以使printf格式像C++流一样浮点数
- 14. 狮身人面像浮点格式化
- 15. 蟒蛇格式化浮点数
- 16. 用sprintf格式化浮点数失败
- 17. postgreql to_char格式化一个浮点数
- 18. 格式化一个浮点数元组
- 19. Python浮点格式化最小字符
- 20. Intl格式化大型浮点数
- 21. 浮点格式化:绘制strftime
- 22. 如何格式化浮点数(Objective-C)
- 23. stringstream setprecision和浮点格式化
- 24. 浮法格式化
- 25. 在Python中格式化浮点到一定的精度
- 26. 在iOS的NSString中动态格式化浮点数
- 27. printf()和浮点错误
- 28. 浮点不精确printf/appendFormat
- 29. 格式浮点数
- 30. 浮点数格式
是不是一个坏主意,比较双打? “如果(d-地板(d)== 0.0)” ? – himself 2013-01-15 07:14:29
@himself不,当你知道你在做什么时很好。“绝不比较'=='的浮点数字”仅仅是一个简单的近似值。 – 2014-06-16 19:23:47