新手问题:
void main () {
int A = 1;
int B = 2;
double C = A / B;
stdout.printf("C value is: %g\n", C);
}
打印:" C值为:0"
void main () {
int A = 1;
double B = 2;
double C = A / B;
stdout.printf("C value is: %g\n", C);
}
打印:" C值为:0.5"
我不明白两种情况下结果都不是0.5的原因。
答案 0 :(得分:6)
除法运算是在两个整数上执行的,因此结果是整数。事后你将它分配给一个双倍并不会改变它。
您在问题中所做的事情,隐含的转换是明确的,是
int A = 1;
int B = 2;
double C = (double) (A / B);
但是,如果要使用双精度执行除法运算,则必须显式地将至少一个操作数强制转换为double:
int A = 1;
int B = 2;
double C = ((double) A) / B;
有关算术运算的规则,请参阅arithmetic expressions section of the Vala Manaual。相关位:
如果两个操作数都是整数类型,那么结果将只是计算的商(相当于向下舍入为整数值的精确答案。)如果任一操作数是浮点类型,那么结果将是在结果类型的边界内尽可能精确(从基本算术类型规则中得出。)