VS告诉我演员阵容是多余的,但即使没有,它也不会返回正确的数据类型

时间:2016-05-19 09:31:56

标签: c# casting

忍受我:我有一个非常简单的比较,在一个值,包含在字典中,这是一个int,和一个浮点数。

在比较之前,我将值除以100,因此我得到一个十进制值(int为50,除以100,得到0.5)。

baseline = 0f;
if ((mydict["intvalue"] / 100) > baseline)
    ...do something

0.5大于0.0,所以它应该"做某事"。

现在,比较总是失败;因为int除以100,结果在0和1之间,最终将成为一个值为0的int,从我所看到的。 我确实施展了价值;解决问题,但VS告诉我演员阵容是多余的;无论哪种方式,结果仍然是0.我不知道我在这里做错了什么。

baseline = 0f;
if ((float)(mydict["intvalue"] / 100) > baseline)
    ...do something

编译器告诉我演员没有必要,但即使我把演员留在那里;我仍然得到0。

4 个答案:

答案 0 :(得分:3)

这是因为float投射应该在其中一个项目中完成(mydict["intvalue"]100)和他们的结果:

//here is one correct way of doing it
if (((float)mydict["intvalue"] / 100) > baseline)

//alternatively
if ((mydict["intvalue"] / 100f) > baseline)

你之前做的是整数除法,然后你转为浮动,因此它是多余的:

//note that here you do division first before casting to float
if ((float)(mydict["intvalue"] / 100) > baseline)

答案 1 :(得分:0)

或像这样的隐式演员

if (mydict["intvalue"] / 100f > baseline)

答案 2 :(得分:0)

您的代码

if ((float)(mydict["intvalue"] / 100) > baseline)

说:通过int得到int divde,结果也是int cast to float。所以你需要修改代码来操作浮点数:

if (((float)mydict["intvalue"] / 100) > baseline)

if ((mydict["intvalue"] / 100f) > baseline)

答案 3 :(得分:0)

(float)(mydict["intvalue"] / 100) > baseline

此代码按此顺序运行。

mydict ["的intValue&#34] = 50

(float)(mydict["intvalue"] / 100) > baseline => (float)(50 / 100) > baseline

50/100 = 0这是问题

(float)(50 / 100) > baseline => (float)0 > baseline

(浮点)0 = 0.0F

(float)0 > baseline => 0.0f>0.0f =>false