C 如何确定数字的小数位数?
我正在用C写一个程序 有没有办法确定小数位数 在浮点数中(即C 如何确定数字的小数位数?,c,decimal,C,Decimal,我正在用C写一个程序 有没有办法确定小数位数 在浮点数中(即0.123=3,0.123456=6等) 除了将数字转换为字符串和使用字符串 用于提取小数点后字符的函数 我有一个名为computeFare()的函数 结果:总票价为34.56美元 我这样做了,它返回34.56。。。 我想要34.57美元 谢谢, 劳伦斯。不太可能,小数位数是数字内部表示形式的函数。当您显示数字时,您看到的是,以字符串形式打印的数字 因此,如果您对显示的值感兴趣,您可以使用第一位的格式化指令(例如,%5.2f)来控制小数
0.123=3
,0.123456=6
等)
除了将数字转换为字符串和使用字符串
用于提取小数点后字符的函数
我有一个名为computeFare()的函数
结果:总票价为34.56美元
我这样做了,它返回34.56。。。
我想要34.57美元
谢谢,
劳伦斯。不太可能,小数位数是数字内部表示形式的函数。当您显示数字时,您看到的是,以字符串形式打印的数字 因此,如果您对显示的值感兴趣,您可以使用第一位的格式化指令(例如,
%5.2f
)来控制小数位数,或者使用字符串函数方法,就像您在文章中提到的那样,在将数字作为字符串后使用字符串函数方法
另外,作为旁白,你会计算尾随的零吗
也许陈述一下你想这样做的目标会有帮助?可能还有其他方法来完成你想要做的事情
更新:
根据您的更新,问题实际上不是计算小数位数,而是您遇到了表示问题/舍入错误(并非罕见)。问题是,一些分数值不能在基数2中精确表示。这里有一个详尽的解释:
看看这个问题:
您可以尝试使用此方法对值进行四舍五入:
float rounded_val = floorf(value * 100.0 + 0.5) / 100.0;
Wikipeadia上有一整篇文章。不太可能,小数位数是数字内部表示形式的函数。当您显示数字时,您看到的是,以字符串形式打印的数字 因此,如果您对显示的值感兴趣,您可以使用第一位的格式化指令(例如,
%5.2f
)来控制小数位数,或者使用字符串函数方法,就像您在文章中提到的那样,在将数字作为字符串后使用字符串函数方法
另外,作为旁白,你会计算尾随的零吗
也许陈述一下你想这样做的目标会有帮助?可能还有其他方法来完成你想要做的事情
更新:
根据您的更新,问题实际上不是计算小数位数,而是您遇到了表示问题/舍入错误(并非罕见)。问题是,一些分数值不能在基数2中精确表示。这里有一个详尽的解释:
看看这个问题:
您可以尝试使用此方法对值进行四舍五入:
float rounded_val = floorf(value * 100.0 + 0.5) / 100.0;
Wikipeadia上有一整篇文章。使用
printf
可以指定小数位数
不等于小数点%.0f
等于显示四位小数的浮点%.4f
printf
可以指定小数位数
不等于小数点%.0f
等于显示四位小数的浮点%.4f
此外,浮点数是不精确的,所以如果你没有一个完美的整数,你就有无限的小数位数。当你打印号码时,你看不到他们,因为他们被剪掉了 A.我不这么认为。即使你能得到mantisa(指数值),它也会以2为基数。
此外,浮点数是不精确的,所以如果你没有一个完美的整数,你就有无限的小数位数。当你打印号码时,你看不到他们,因为他们被剪掉了 在您最近一次编辑之后,听起来您只是想进行四舍五入,而不是真正关心数字的小数位数 如果是这种情况,您可以使用如下代码:
#include <math.h>
float computeFare()
{
float totalFare;
totalFare = (3.40 + basicFare) * (1 + surchargePercent);
totalFare = floorf(totalFare * 100 + 0.5) / 100; //round the answer
return totalFare; // **in this case totalFare = 34.567**
}
printf("Total fare is $%.2f\n", computeFare());
#包括
float computeFare()
{
浮动总票价;
总票价=(3.40+基本费用)*(1+附加费百分比);
totalFare=floorf(totalFare*100+0.5)/100;//将答案四舍五入
返回totalFare;//**在这种情况下,totalFare=34.567**
}
printf(“总票价为%.2f\n”,computeFare());
在您最近一次编辑之后,听起来您只是想进行四舍五入,而不是真正关心数字的小数位数
如果是这种情况,您可以使用如下代码:
#include <math.h>
float computeFare()
{
float totalFare;
totalFare = (3.40 + basicFare) * (1 + surchargePercent);
totalFare = floorf(totalFare * 100 + 0.5) / 100; //round the answer
return totalFare; // **in this case totalFare = 34.567**
}
printf("Total fare is $%.2f\n", computeFare());
#包括
float computeFare()
{
浮动总票价;
总票价=(3.40+基本费用)*(1+附加费百分比);
totalFare=floorf(totalFare*100+0.5)/100;//将答案四舍五入
返回totalFare;//**在这种情况下,totalFare=34.567**
}
printf(“总票价为%.2f\n”,computeFare());
您试图解决什么问题?请查看此链接float computeFare(){totalFare=(3.40+basicFare)*(1+surchargePercent);return totalFare;//在本例中totalFare=34.567}printf(“总票价为$%.2f\n”,computeFare());我这样做了,它返回34.56。。。我希望它是34.57美元。在打印之前,您需要将computeFare四舍五入到最接近的小数点后2位,因为%.2f总是在不舍入的情况下截断。这应该能解决你的问题,我明白了。我怎么能做到呢?有没有C语言的库可以进行舍入