Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将浮点转换为整数进行算术运算的最佳方法?_C#_Casting - Fatal编程技术网

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中这样做。试试

在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