C# 将浮点转换为整数进行算术运算的最佳方法?
在C#中,我正在做这样的事情:C# 将浮点转换为整数进行算术运算的最佳方法?,c#,casting,C#,Casting,在C#中,我正在做这样的事情: float a = 4.0f; float b = 84.5f; int ans = a * b; 但是,编译器声明在赋值中从float->int转换需要强制转换。当然,我可能会这样做: int ans = (int)a * (int)b; 但这是丑陋和多余的。有更好的办法吗?我知道C++中我能做到这一点: int ans = int(a * b); int ans = (int)(a * b); 至少这在眼睛上看起来好一点。但我似乎不能在C中这样做。试试
float a = 4.0f;
float b = 84.5f;
int ans = a * b;
但是,编译器声明在赋值中从float->int转换需要强制转换。当然,我可能会这样做:
int ans = (int)a * (int)b;
但这是丑陋和多余的。有更好的办法吗?我知道C++中我能做到这一点:
int ans = int(a * b);
int ans = (int)(a * b);
至少这在眼睛上看起来好一点。但我似乎不能在C中这样做。试试
intans=(int)(a*b)
将int
也放在括号中
这两种说法并不相同,会产生不同的结果。在一次情况下,在乘法之前放弃精度,在乘法之后放弃精度。
在代码的外观之前,应该考虑应用程序的需要。对
int
进行float
数学运算是不可掉以轻心的。真正的问题是你想从你的最终答案中得到什么
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。这将极大地改变你的最终结果。你需要考虑你的申请中所需要的东西。 @你所说的取决于你在哪里学的英语。这是一个比用代码看起来好的问题更大的问题。取决于施法的时间,它将改变结果。@David,你是对的,但他的问题特别询问了正确的施法方法。(不过我对你的答案投了赞成票,因为你的解释很透彻。)这取决于你的最终结果。你想要什么样的准确度?谢谢你(和其他人)的回答。我真正想要的是在乘法之后截断它,所以后一种解决方案就是我需要的。
int ans = (int)a * (int)b;
// ans = 336
int ans = (int)(a * b);
// ans = 338