在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#中做到这一点。
答案 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);