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