C 如何获取浮点值的小数位数?
我想用科学符号表示最终产品的四舍五入。 因此,如果80.55和879.5689给出70849.281250,则最终打印函数输出70849.28 有没有办法获得输入的两个浮点数的小数位数?(我知道从技术上讲,它们没有小数点,但有可能吗?)如果我有两个整数声明为每个整数的小数点位数,我可以使用If/else进行比较,并将至少一个声明为另一个整数,但我不知道如何在此处使用int来代替5:%.5f 如何获取浮点值的小数位数?C 如何获取浮点值的小数位数?,c,floating-point,decimal,C,Floating Point,Decimal,我想用科学符号表示最终产品的四舍五入。 因此,如果80.55和879.5689给出70849.281250,则最终打印函数输出70849.28 有没有办法获得输入的两个浮点数的小数位数?(我知道从技术上讲,它们没有小数点,但有可能吗?)如果我有两个整数声明为每个整数的小数点位数,我可以使用If/else进行比较,并将至少一个声明为另一个整数,但我不知道如何在此处使用int来代替5:%.5f 如何获取浮点值的小数位数? 有没有办法获得输入的两个浮点数的小数位数 将一行用户输入读入字符串。强烈推荐f
有没有办法获得输入的两个浮点数的小数位数
fgets()
strchr()
或helper code搜索小数点,用搜索数字的结尾“%n”
static int find_prec(const char *s, int length) {
for (int i=0; i < length; i++) {
if (s[i] == '.') {
i++;
int p = 0;
while (isdigit((unsigned char) s[i+p])) {
p++;
}
return p;
}
}
return 0;
}
...
if (fgets(buffer, sizeof buffer, stdin)) {
double x[2];
int n[2];
if (sscanf(buffer, "%f%n %f%n", &x[0], &n[0], &x[1], &n[1]) == 2) {
int num_dp[2];
num_dp[0] = find_prec(buffer, n[0]);
num_dp[1] = find_prec(buffer + n[0], n[1] - n[0]);
static int find_prec(常量字符*s,int长度){
for(int i=0;i
如何获取浮点值的小数位数?有没有办法获得输入的两个浮点数的小数位数
fgets()
strchr()
或helper code搜索小数点,用搜索数字的结尾“%n”
static int find_prec(const char *s, int length) {
for (int i=0; i < length; i++) {
if (s[i] == '.') {
i++;
int p = 0;
while (isdigit((unsigned char) s[i+p])) {
p++;
}
return p;
}
}
return 0;
}
...
if (fgets(buffer, sizeof buffer, stdin)) {
double x[2];
int n[2];
if (sscanf(buffer, "%f%n %f%n", &x[0], &n[0], &x[1], &n[1]) == 2) {
int num_dp[2];
num_dp[0] = find_prec(buffer, n[0]);
num_dp[1] = find_prec(buffer + n[0], n[1] - n[0]);
static int find_prec(常量字符*s,int长度){
for(int i=0;i
如果您使用fgets
输入值,您可以使用strchr()
找到小数点的位置(如果有),并计算从中输入的小数位数和字符串长度。然后使用sscanf()
或strof()
提取值。别忘了提取。最后,如果你能从20世纪的浮动向前移动到double
请这样做。这将需要strtod()
。使用printf(“%.*f”,places,value);
或printf(“%.*f”,places1
也许某个善良的灵魂会为您发布免费代码,但事实并非如此。请尝试实现我的第一条评论中的内容,以查找每个输入中的小数点。我不明白您在这里试图实现什么。您似乎希望以两个操作数的小数点的最小值输出结果--是吗?但对于乘法,这在数学上毫无意义。对于乘法和除法(与加法和减法相反),12.3*4.567
vs1.23*45.67
,得到的结果肯定不一样,您希望保留有效数字,而不是小数位数。80.55*879.5689=70849.274895, 不是70849.281250。为什么要70849.28而不是70849.27的四舍五入输出?如果使用fgets
输入值,则可以使用strchr()
找到小数点的位置(如果有),并计算从中输入的小数位数和字符串长度。然后使用sscanf()
或strtof()
提取值。别忘了。最后,如果你能从20世纪float
到double
请这样做。这将需要strtod()
。使用printf(%.*f),places,value);
或printf(%.*f),places1
也许某个善良的灵魂会为您发布免费代码,但事实并非如此。请尝试实现我的第一条评论中的内容,以查找每个输入中的小数点。我不明白您在这里试图实现什么。您似乎希望以两个操作数的小数点的最小值输出结果--是吗?但对于乘法,这在数学上毫无意义。对于乘法和除法(与加法和减法相反),12.3*4.567
vs1.23*45.67
,得到的结果肯定不一样,您希望保留有效数字,而不是小数位数。80.55*879.5689=70849.274895, 不是70849.281250。为什么要70849.28而不是70849.27的四舍五入输出?