vala:两个整数的商总是一个整数.为什么?

wwr*_*wwr 2 vala

新手问题:

void main () {
    int A = 1;
    int B = 2;
    double C = A / B;
    stdout.printf("C value is: %g\n", C);
}
Run Code Online (Sandbox Code Playgroud)

打印:"C值为:0"

void main () {
    int A = 1;
    double B = 2;
    double C = A / B;
    stdout.printf("C value is: %g\n", C);
}
Run Code Online (Sandbox Code Playgroud)

打印:"C值为:0.5"

我不明白两种情况下结果都不是0.5的原因.

nem*_*equ 6

除法运算是在两个整数上执行的,因此结果是整数.之后将其分配给double的事实不会改变它.

你在问题中做了什么,隐含的转换是明确的,是

int A = 1;
int B = 2;
double C = (double) (A / B);
Run Code Online (Sandbox Code Playgroud)

但是,如果要使用双精度执行除法运算,则必须显式地将至少一个操作数强制转换为double:

int A = 1;
int B = 2;
double C = ((double) A) / B;
Run Code Online (Sandbox Code Playgroud)

有关算术运算的规则,请参阅Vala Manaual算术表达式部分.相关位:

如果两个操作数都是整数类型,那么结果将只是计算的商(相当于向下舍入为整数值的精确答案.)如果任一操作数是浮点类型,那么结果将是精确的尽可能在结果类型的边界内(从基本算术类型规则中得出).