将float转换为int算法的最佳方法是什么?

时间:2010-02-24 20:33:47

标签: c# casting

在C#中,我正在做这样的事情:

float a = 4.0f;
float b = 84.5f;
int ans = a * b;

但是,编译器声明需要强制转换为float - > int in assignment。当然我可能会这样做:

int ans = (int)a * (int)b;

但这是丑陋和多余的。有没有更好的办法?我知道在C ++中我可以这样做:

int ans = int(a * b);

至少在眼睛看起来好一点。但我似乎无法在C#中做到这一点。

5 个答案:

答案 0 :(得分:9)

在查看代码之前,您应该考虑应用程序的需要。对float进行int数学运算并不是一件容易的事情。真正的问题是你在最终答案中寻找什么。

a被强制转换为4,b被强制转换为84,这是336的结果。但是如果在进行数学运算后将其转换为int,则结果为338.

2对你来说是否足够好?然后你必须做

int ans = (int)a * (int)b;

// ans = 336

如果你想要338则必须这样做

int ans = (int)(a * b);

// ans = 338

我真的会考虑你正在做的事情的副作用。理想情况下,在进行数学计算之前,您应该有一个用于舍入2个浮点数的策略。记住,转换为int只会减少一个小数。所以84.9变为84.这可能会大大改变你的最终结果。您需要考虑申请中的要求。

答案 1 :(得分:3)

也将int括在括号中。

int ans = (int)(a * b);

答案 2 :(得分:2)

 int ans = (int)a * (int)b; 

 int ans = (int)(a * b); 

这两个陈述不相同,会产生不同的结果。在一次的情况下,你在乘法之前放弃精度,在乘法之后放弃另一个。

答案 3 :(得分:1)

尝试int ans = (int)(a * b);

答案 4 :(得分:1)

int ans = (int)(a * b);