使用c编程在数字/字符串中动态设置小数分隔符



我在输入字符串中放置小数点时遇到问题。请参阅我的代码以更好地理解。说明:字段宽度应为八(8(位,右对齐,零填充。最左边的数字表示小数分隔符应从右边移动的位置数。

预期结果应该是这样的:示例1:71234567输出0.1234567

示例2:31234567输出:1234.567

但当我用上面的例子运行我的代码时,我得到的是低于输出的结果。输出1:0.123457输出2:1234.567000

它不需要在右边加零。为什么会发生这种情况。有人能告诉我吗?

附上我的代码片段:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int main()
{
unsigned char str[8] = "31234567";
int num = atoi(str);  //Convert string to int
printf("num = %dn",num);
int FirstDigit = num;
num = num % (unsigned long)pow(10.0, (double)floor(log10(num)));
printf("After removing 1st digit from number = %dn",num);
while(FirstDigit>=10)
{
FirstDigit = FirstDigit/10;
}
printf("Decimal position stored in FirstDigit = %dn",FirstDigit);
printf("Final value = %f",num/pow(10,FirstDigit));
return 0;
}

如果未指定精度,则默认情况下printf会给出6位有效数字。

https://man7.org/linux/man-pages/man3/printf.3.html

g,g双参数以f或e(或f或E对G的转换(。精度指定数字有效位数。如果精度缺失,6给出了数字;如果精度为零,则进行处理如1。如果转换后的指数为,则使用样式e小于-4或大于或等于精度。从后果小数点只有在后面跟至少一个数字。

在您的情况下,您试图打印数字0.1234567,但该数字中有7个有效数字。因此printf将该数字四舍五入到0.123457。可以这样指定精度。

printf("Final value = %.7f",num/pow(10,FirstDigit)); // (%.7f)

但您也希望去掉后面的零。为此,你可以这样使用它。

printf("Final value = %.10g",num/pow(10,FirstDigit)); // (%.10g)

我将精度指定为10,因为您使用的是int。因此int最多可以有10位数字。

相关内容

  • 没有找到相关文章

最新更新