有人可以解释一下如何用C函数选择浮点数的精度吗?
示例:
theFatFunction(0.666666666, 3)
返回0.667
theFatFunction(0.111111111, 3)
返回0.111
答案 0 :(得分:13)
您不能这样做,因为精确度取决于数据类型(即float
或double
或long double
)。如果要将其舍入以进行打印,可以使用printf()
中的正确格式说明符,即printf("%0.3f\n", 0.666666666)
。
答案 1 :(得分:2)
你做不到。精度完全取决于数据类型。你有float
和double
,就是这样。
答案 2 :(得分:2)
浮点数具有静态,固定的精度。你无法改变它。你有时可以做的是围绕数字。
请参阅this page,并考虑使用10的幂来扩展自己。请注意,并非所有数字都可以完全表示为浮点数。
答案 3 :(得分:1)
大多数系统遵循IEEE-754浮点标准,该标准定义了几种浮点类型。
在这些系统上,float
通常是IEEE-754 binary32
单精度类型:它具有24位精度。 double
是binary64
双精度类型;它具有53位的精度。位数的精度由IEEE-754标准定义,不能更改。
使用fprintf
系列的函数(例如printf
)打印浮点类型的值时,精度定义为最大有效位数,默认设置为6位。您可以在转换规范中使用.
后跟十进制数更改默认精度。例如:
printf("%.10f\n", 4.0 * atan(1.0)); // prints 3.1415926536
,而
printf("%f\n", 4.0 * atan(1.0)); // prints 3.141593
答案 4 :(得分:0)
精度由数据类型决定(即float或double或long double)。
如果要将其舍入以进行打印,可以在printf()中使用正确的格式说明符,即
printf("%0.3f\n", 0.666666666) //will print 0.667 in c
现在,如果你想将它舍入用于计算目的,你必须首先将浮点数乘以10 ^位数,然后将类型转换为int,进行计算,然后再次进行类型转换以浮点并除以10的相同幂
float f=0.66666;
f *= 1000; // 666.660
int i = (int)f; // 666
i = 2*i; // 1332
f = i; // 1332
f /= 1000; // 1.332
printf("%f",f); //1.332000
答案 5 :(得分:0)
大概是以下步骤:
谢谢。