如何将小数转换为整型?
当前回答
你不能。
当然可以,但是int (System.Int32)不足以容纳所有可能的十进制值。
这意味着如果你强制转换一个比int大的小数。MaxValue会溢出,如果小数点小于int。MinValue,它会溢出。
当你不足/溢出时会发生什么?两件事之一。如果您的构建是未检查的(即,CLR并不关心您是否这样做),您的应用程序将在值溢出/下溢之后继续运行,但int中的值将不是您所期望的值。这可能会导致间歇性的错误,并且可能很难修复。您的应用程序最终将处于未知状态,这可能会导致应用程序破坏它所处理的任何重要数据。不好的。
如果您的程序集被选中(properties->build->advanced->check for算术溢出/下溢或/checked compiler选项),则在发生下溢/溢出时,代码将抛出异常。这可能比没有好;但是,程序集的默认值是不检查溢出/溢出。
真正的问题是“你想做什么?”在不知道你的需求的情况下,没有人能告诉你在这种情况下应该做什么,除了显而易见的:不要这样做。
如果你特别不在乎,这里的答案是有效的。但是,您应该传达您的理解,即可能发生溢出,并且将强制转换代码包装在未检查的块中无关紧要
unchecked
{
// do your conversions that may underflow/overflow here
}
这样,后面的人就会明白你不在乎,如果将来有人把你的构建改为/checked,你的代码就不会意外地崩溃。
如果你想要做的只是去掉数字的小数部分,留下整数部分,你可以使用Math.Truncate。
decimal actual = 10.5M;
decimal expected = 10M;
Assert.AreEqual(expected, Math.Truncate(actual));
其他回答
我发现强制转换操作符不工作,如果你有一个盒装小数(即一个对象类型内的十进制值)。转换。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开箱转换
decimal vIn = 0.0M;
int vOut = Convert.ToInt32(vIn);
这是一个非常方便的转换数据类型的网页,为那些其他人。 http://www.convertdatatypes.com/Convert-decimal-to-int-in-CSharp.html
使用转换。从mscorlib中的ToInt32
decimal value = 3.14m;
int n = Convert.ToInt32(value);
看到MSDN。你也可以使用Decimal.ToInt32。同样,请参见MSDN。最后,你可以直接转换为
decimal value = 3.14m;
int n = (int) value;
它使用显式强制转换操作符。看到MSDN。
系统。Decimal实现了IConvertable接口,该接口有一个ToInt32()成员。
调用System.Decimal.ToInt32()工作吗?
将十进制转换为整数
decimal decimalValue=5.00;
int intValue=Convert.ToInt32(decimalValue);
推荐文章
- .Net HttpWebRequest.GetResponse()在返回http状态码400(坏请求)时引发异常
- 在using块的中间返回
- 找到未使用的代码
- 是什么让Visual Studio调试器停止评估ToString重写?
- ContentControl和ContentPresenter有什么区别?
- 一个字符串的字符串列表
- 无法确定条件表达式的类型,因为'int'和<null>之间没有隐式转换
- 从实体框架中删除单个记录?
- 创建一个完成的任务
- 字典的字面符号在c# ?
- 随机字符串生成器返回相同的字符串
- 为什么Func<T,bool>而不是Predicate<T>?
- .NET中的Map和Reduce
- 我如何能使一个组合框不可编辑的。net ?
- .NET反射的成本有多高?