【发布时间】:2011-09-07 04:05:32
【问题描述】:
考虑以下几点:
int num = 5;
double total = num / 2;
说num / 2 的商不是double 是否正确,因为您需要将int 解析为double?
【问题讨论】:
考虑以下几点:
int num = 5;
double total = num / 2;
说num / 2 的商不是double 是否正确,因为您需要将int 解析为double?
【问题讨论】:
技术上的答案是/ 运算符在给定两个整数时会生成一个整数。此计算独立于其对double 变量的分配完成。
您实际上确实在变量 total 中获得了一个双精度值,但它是 2.0,而不是 2.5。整数 2 在初始化时被强制转换为 2.0。
如果您想要 2.5,您的选择是:
double total = num / 2.0;
double total = (double)num / 2;
简而言之,这不是解析问题,而是 C++ 运算符语义之一。希望这是有道理的。
【讨论】:
/ 运算符的处理在 (1) 静态类型和 (2) 选择重载浮点类型和整数的语言中并不少见。一些静态类型的语言避免重载;标准 ML 区分 / 用于实数和 div 用于整数。 JavaScript 甚至没有整数除法。 5/2 只是 2.5。这么多选择。 :)
double total = num * 0.5; 我更喜欢 :)