System.Convert.ToInt vs (int)

c#, types

Solution

Casting to int is implicit truncation, not implicit flooring:

double d = -3.14;
int i = (int)d;
// i == -3

I choose Math.Floor or Math.Round to make my intentions more explicit.

Problem

I noticed in another post, someone had done something like: ``` double d = 3.1415; int i = Convert.ToInt32(Math.Floor(d)); ``` Why did they use the convert function, rather than: ``` double d = 3.1415; int i = (int)d; ``` which has an implicit floor and convert. Also, more concerning, I noticed in some production code I was reading: ``` double d = 3.1415; float f = Convert.ToSingle(d); ``` Is that the same as: ``` float f = (float)d; ``` Are all those otherwise implicit conversions just in the Convert class for completeness, or do they serve a purpose? I can understand a need for .ToString(), but not the rest.

Original source