忍受我:我有一个非常简单的比较,在一个值,包含在字典中,这是一个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。
答案 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