2

我只是想问一下,如果我在存储在这样的浮点变量中时不将整数类型转换为浮点数,会发生什么情况:

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = IntVar1/IntVar2;

目前我正在这样做:

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = float(IntVar1)/float(IntVar2);

但是在我拥有的代码量中,这看起来真的很迟钝。我想过将我的 int 变量更改为浮动,但我想这会影响性能。而且由于整数值不应该包含任何小数,所以感觉完全是浪费。

所以我想知道,选项1有什么办法可以工作吗?还是我必须进行类型转换或将变量更改为浮动?(所有类型转换几乎都使代码不可读)

4

4 回答 4

3

我不会太担心过早的优化。如果将您的值表示为float类型更有意义,那就去做吧。如果您的程序没有按您需要的速度运行,并且您已经对其进行了分析并且知道浮点运算是问题所在,那么请开始考虑如何加快它的速度。

我会重视所有选角的可读性,这似乎也是你的直觉。

此外,由于这个问题被标记为 C++,我认为(不幸的是?)这样做更习惯:

float FloatVar = static_cast<float>(IntVar1)/IntVar2
于 2012-08-01T15:40:26.727 回答
3

看看函数的魔力:

float div(int x, int y)
{
    return float(x) / float(y);
}

现在你可以说:

int32 IntVar1 = 100
int32 IntVar2 = 200
float FloatVar = div(IntVar1, IntVar2);
于 2012-08-01T15:52:15.710 回答
1

您至少需要其中一个操作数为浮点数,否则除法将被截断。我通常会转换第一个操作数:

float FloatVar = (float)IntVar1/IntVar2;

从优雅的角度来看,这还不错。

于 2012-08-01T15:37:30.407 回答
0

根据 ISO/IEC 标准- N3797 - 第 5.6 节

对于整数操作数, / 运算符产生代数商,其中任何小数部分被丢弃;如果商 a/b 在结果的类型中是可表示的,则 (a/b)*b + a%b 等于 a;否则,a/b 和 a%b 的行为都是未定义的

小数部分的丢弃称为向零截断

难怪小数部分被丢弃在

22/7
于 2016-02-06T18:52:39.353 回答