为什么 5.0/3 在 C 中是 1.666667?
Why 5.0/3 is 1.666667 in C?
我是 C 语言的新手,但我在 C 中尝试了整数、浮点数和双除法,就像我通常在 Java 中所做的那样,但是当我执行 5.0/3 而不是 1.6666666666666667 时,我双除法和浮点除法得到 1.666667。
我曾尝试像往常一样使用 Visual Studio 执行程序,但在执行后收到消息 "First number is 1, second one is 1.666667 and the last one is 1.666667.":
#include <stdio.h>
int main()
{
int firstNumber = 5 / 3;
float secondNumber = 5.0f / 3.0f;
double thirdNumber = 5.0 / 3.0;
printf("First number is %d, second one is %f and the last one is %lf.", firstNumber, secondNumber, thirdNumber);
return 0;
}
为什么 'secondNumber' 和 'thirdNumber' 的结果相同?
典型的float
可以表示大约232个不同的值。
典型的double
可以表示大约264个不同的值。
在这两种类型中,5/3 除法的确切商不在该集合中。取而代之的是使用附近的值(一些二进制分数)。
float secondNumber = 5.0f / 3.0f; // 1.66666662693023681640625
double thirdNumber = 5.0 / 3.0; // 1.6666666666666667406815349750104360282421112060546875
使用"%f"
时,使用小数点后6位。打印的文字是圆形的。在这两种情况下,四舍五入相同。
1.666667
要查看更多数字,请使用 "%.10f"
、"%.20f"
等。
printf("%.10f\n", secondNumber);
printf("%.10f\n", thirdNumber);
输出
1.6666666269
1.6666666667
我是 C 语言的新手,但我在 C 中尝试了整数、浮点数和双除法,就像我通常在 Java 中所做的那样,但是当我执行 5.0/3 而不是 1.6666666666666667 时,我双除法和浮点除法得到 1.666667。
我曾尝试像往常一样使用 Visual Studio 执行程序,但在执行后收到消息 "First number is 1, second one is 1.666667 and the last one is 1.666667.":
#include <stdio.h>
int main()
{
int firstNumber = 5 / 3;
float secondNumber = 5.0f / 3.0f;
double thirdNumber = 5.0 / 3.0;
printf("First number is %d, second one is %f and the last one is %lf.", firstNumber, secondNumber, thirdNumber);
return 0;
}
为什么 'secondNumber' 和 'thirdNumber' 的结果相同?
典型的float
可以表示大约232个不同的值。
典型的double
可以表示大约264个不同的值。
在这两种类型中,5/3 除法的确切商不在该集合中。取而代之的是使用附近的值(一些二进制分数)。
float secondNumber = 5.0f / 3.0f; // 1.66666662693023681640625
double thirdNumber = 5.0 / 3.0; // 1.6666666666666667406815349750104360282421112060546875
使用"%f"
时,使用小数点后6位。打印的文字是圆形的。在这两种情况下,四舍五入相同。
1.666667
要查看更多数字,请使用 "%.10f"
、"%.20f"
等。
printf("%.10f\n", secondNumber);
printf("%.10f\n", thirdNumber);
输出
1.6666666269
1.6666666667