如何将小数转换为整型?
当前回答
我更喜欢用数学。圆的,数学。地板上,数学。天花板或数学。截断以显式地设置适当的舍入模式。
注意,它们也都返回Decimal——因为Decimal的值范围比Int32大,所以您仍然需要强制转换(并检查溢出/下溢)。
checked {
int i = (int)Math.Floor(d);
}
其他回答
decimal d = 2;
int i = (int) d;
这应该可以正常工作。
快速舍入的一个巧妙技巧是在将小数点转换为整型之前加上。5。
decimal d = 10.1m;
d += .5m;
int i = (int)d;
仍然保留i=10,但是
decimal d = 10.5m;
d += .5m;
int i = (int)d;
四舍五入,使i=11。
我更喜欢用数学。圆的,数学。地板上,数学。天花板或数学。截断以显式地设置适当的舍入模式。
注意,它们也都返回Decimal——因为Decimal的值范围比Int32大,所以您仍然需要强制转换(并检查溢出/下溢)。
checked {
int i = (int)Math.Floor(d);
}
四舍五入小数到最接近的整数
decimal a ;
int b = (int)(a + 0.5m);
当a = 49.9时,b = 50
当a = 49.5时,b = 50
当a = 49.4时,b = 49,以此类推。
我发现强制转换操作符不工作,如果你有一个盒装小数(即一个对象类型内的十进制值)。转换。ToInt32(作为对象的十进制)在这种情况下工作正常。
当从数据库中检索IDENTITY/ autoumber值时出现这种情况:
SqlCommand foo = new SqlCommand("INSERT INTO...; SELECT SCOPE_IDENTITY()", conn);
int ID = Convert.ToInt32(foo.ExecuteScalar()); // works
int ID = (int)foo.ExecuteScalar(); // throws InvalidCastException
参见4.3.2开箱转换
推荐文章
- 如何舍入一个双到最近的Int在迅速?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何在iis7应用程序池中设置。net Framework 4.5版本
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- c#对象列表,我如何得到一个属性的和
- 我如何使用IValidatableObject?
- 如何指定最小值,但没有使用范围数据注释属性的最大小数?
- 如何在PowerShell中获得本地主机名?
- c# vs Java Enum(适合c#新手)
- c#消毒文件名
- 为什么在Java和。net中不能修改字符串?
- 在c++中,如何将int值附加到字符串中?
- 在EF中更新父实体时如何添加/更新子实体