【问题标题】:Type of the quotient of two integers两个整数的商的类型
【发布时间】:2011-09-07 04:05:32
【问题描述】:

考虑以下几点:

int num = 5;
double total = num / 2;

num / 2 的商不是double 是否正确,因为您需要将int 解析为double

【问题讨论】:

    标签: c++ parsing math logic


    【解决方案1】:

    技术上的答案是/ 运算符在给定两个整数时会生成一个整数。此计算独立于其对double 变量的分配完成。

    您实际上确实在变量 total 中获得了一个双精度值,但它是 2.0,而不是 2.5。整数 2 在初始化时被强制转换为 2.0。

    如果您想要 2.5,您的选择是:

    double total = num / 2.0;
    
    double total = (double)num / 2;
    

    简而言之,这不是解析问题,而是 C++ 运算符语义之一。希望这是有道理的。

    【讨论】:

    • @Howdy_McGee:与其他语言相比?在 Java 和 C# 等其他强类型语言中,情况完全相同。
    • @Howdy_McGee:其他语言,你的意思是 Python、Ruby 或 Java? :-P(IOW,In silico 所说的。:-P)
    • C++ 对 / 运算符的处理在 (1) 静态类型和 (2) 选择重载浮点类型和整数的语言中并不少见。一些静态类型的语言避免重载;标准 ML 区分 / 用于实数和 div 用于整数。 JavaScript 甚至没有整数除法。 5/2 只是 2.5。这么多选择。 :)
    • 第三个选项是double total = num * 0.5; 我更喜欢 :)
    • 我认为,如果你想要一个双商,至少有一个操作数,无论是除数还是被除数,都必须转换为或表示为双精度数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    相关资源
    最近更新 更多