新手问题:
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的原因.
除法运算是在两个整数上执行的,因此结果是整数.之后将其分配给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的算术表达式部分.相关位:
如果两个操作数都是整数类型,那么结果将只是计算的商(相当于向下舍入为整数值的精确答案.)如果任一操作数是浮点类型,那么结果将是精确的尽可能在结果类型的边界内(从基本算术类型规则中得出).