我使用strtok
,1,2,1.0
从字符串中提取了带小数位的数字。
更新
这种情况下的格式将限制在0.0 up to 1.0
。所以单个主要&小数位。 printf用于用户反馈和确认后,该号码会传递到请求number format
n.n
的库。 Perhapse我误解了这条消息,如果这个数字少于一个,那么作为一个c程序只需要.n
。
我现在需要将第三个数字转换为具有n.n
格式的int,如果小于1,则需要前导零。
我尝试过int, float, double
和atoi(x), strtoumax
的几种组合,但在printf中获得1
或1.0000....
。
我需要printf并在内部使用var。 那么最好的组合和格式是什么?
// third number (this may move position in token order)
????? myNumber;
strcpy(string, strtok( NULL, ","));
myNumber=atoi(string);
printf("the number is %?\n", myNumber);
g_object_set(theItem, "alpha", myNumber, NULL); // accepts n.n only 0.0 -> 1.0
答案 0 :(得分:3)
虽然你的问题不清楚,但我认为你想要的是:
double myNumber;
myNumber = atof(string); // "0.5" for example
printf("%03.1f", myNumber); // Output: 0.5
格式化程序表示:
0
- 带有前导零的垫3
- 总输出应至少为3个字符(整数,十进制,十分之一)如果需要,输出可能更多.1
- 小数点后,显示1位数。如果您真的想要int
,但要显示小数位,我建议:
int myNumber = 3;
printf("%03.1f", (double)myNumber); // Resulting in output: "3.0"
避免整个strtok
/ atoi
/ printf
问题,只需尝试这些硬编码调用即可。其中一个应该工作:
g_object_set(theItem, "alpha", "0.5", NULL); // Param is a string
g_object_set(theItem, "alpha", 0.5, NULL); // Param is a double
g_object_set(theItem, "alpha", .5, NULL); // Param is also a double
g_object_set(theItem, "alpha", 1, NULL); // Param is an int.
告诉我们哪一个有用。
答案 1 :(得分:0)
我使用
strtok
,1,2,1.0
从字符串中提取了带小数位的数字。我现在需要将第三个数字转换为具有
n.n
格式的int,如果小于1,则需要前导零。
您将值与演示文稿混淆。所有C整数类型表示整数值 - 即,没有任何非零有效数字的值具有小于1的位值。因此,它们不为位值小于1的数字提供存储。此外,唯一的非负整数小于1是0,在某种意义上,它自动具有前导零。因此,您描述的转换不可用或不必要。
另一方面,如果你想格式化一个带有尾随(全零)小数位的整数,那么这很容易,但结果不再是{{1但是一个字符串(如果结果甚至保留)。例如:
int
也许您希望保留有关指定整数值的精度的信息 - 即小数点后的零数。在任何内置整数或浮点数据类型中,此类信息无法自然表示。如果需要,则必须单独跟踪该数据。
这同样适用于浮点 - 也就是说,你也不能将值与表示混淆。 C浮点数据类型(char decimal_integer[15];
int one_point_oh = 1;
// does the right thing for 0, too:
sprintf(decimal_integer, "%d.0", one_point_oh);
,float
和double
)表示数值,但它们不代表其格式。如果需要将格式详细信息与单个值相关联,则需要单独跟踪这些值。格式化演示编号时,您会考虑此类详细信息。