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

使用c编程在数字/字符串中动态设置小数分隔符,c,C,我在输入字符串中放置小数点时遇到问题。请参考我的代码以便更好地理解。 说明:该字段应为八(8)位宽度,右对齐,零填充。最左边的数字表示小数点分隔符应从右边移动的位置数 预期结果如下: 例1:71234567 产出0.1234567 例2:31234567 输出:1234.567 但当我用上面的例子运行我的代码时,我得到了下面的输出。 产出1:0.123457 产出2:1234.567000 它不需要在右边附加零。为什么会发生这种情况。有人能告诉我吗 附上我的代码片段: #include<s

我在输入字符串中放置小数点时遇到问题。请参考我的代码以便更好地理解。 说明:该字段应为八(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 = %d\n",num);
        int FirstDigit = num;
        num = num % (unsigned long)pow(10.0, (double)floor(log10(num)));
        printf("After removing 1st digit from number = %d\n",num);
        while(FirstDigit>=10)
        {
            FirstDigit = FirstDigit/10;
        }
        printf("Decimal position stored in FirstDigit = %d\n",FirstDigit);
        printf("Final value = %f",num/pow(10,FirstDigit));
        return 0;
}
#包括
#包括
#包括
#包括
int main()
{
无符号字符str[8]=“31234567”;
int num=atoi(str);//将字符串转换为int
printf(“num=%d\n”,num);
int FirstDigit=num;
num=num%(无符号长)功率(10.0,(双)层(log10(num));
printf(“从编号=%d\n”中删除第一位数字后,num);
而(第一位数>=10)
{
第一位数=第一位数/10;
}
printf(“存储在FirstDigit=%d\n”中的十进制位置,FirstDigit);
printf(“最终值=%f”,num/pow(10,第一位数));
返回0;
}

对于默认值printf如果未指定精度,则给出6位有效数字

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)
但是你也希望去掉尾随的零。你可以这样使用它

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

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

将输入视为以数字开头的字符串,例如
“4abcdef”
我需要了解我的代码有什么问题。如果有人能告诉我们修改后的代码,我将不胜感激。谢谢您好,您将获得默认的浮点格式。。。如果需要特定位数,则需要使用不同格式的字符串-例如“%.2f”在小数点后给出两个位置。。有关更多详细信息,请参见()或()