我正在尝试使用较小的程序作为示例来解决为什么会出现更大的问题。这个较小的程序不起作用,让我相信这是我对有缺陷的功能的理解。
据我所知,以下程序应初始化一个最多30个字符的字符串,然后将数字“5”取为9个有效数字,并将其转换为该字符串。然后程序应打印值“5.00000000”。但是,程序打印值7.96788(...)。这是为什么?
#include <stdio.h>
int main()
{
char word[30];
sprintf(word, "%.9g", 5);
printf(word);
return 0;
}
答案 0 :(得分:22)
这是因为5
是一个整数(int
),你告诉sprintf
假装它是一个双精度浮点数(double
)。你需要改变这个:
sprintf(word,"%.9g", 5);
以下任何一个:
sprintf(word,"%.9g", 5.0);
sprintf(word,"%.9g", (double) 5);
答案 1 :(得分:1)
请改用5.0
。 5
本身就是一个整数,并且会被看作是一个浮点数,这就是你的7.xxxx来自的地方。
答案 2 :(得分:1)
我看到两个问题:
正如其他人已经说过的那样,您必须指定double
而不是int
。在这些情况下,您的编译器可能会打开警告(例如,在gcc中-Wall
)。
要打印5.00...
,您应该使用%f
代替%g
。
这使得sprintf(word,"%.9f", (double) 5);
成为正确的语法。
答案 3 :(得分:0)
或者您可以更改描述符格式:"%.9d"