Yaa*_*lis 78 .net c# int decimal
返回小数的整数部分的最佳方法是什么(在c#中)?(这必须适用于可能不适合int的非常大的数字).
GetIntPart(343564564.4342) >> 343564564
GetIntPart(-323489.32) >> -323489
GetIntPart(324) >> 324
Run Code Online (Sandbox Code Playgroud)
这样做的目的是:我插入数据库中的十进制(30,4)字段,并希望确保我不会尝试插入一个数字而不是字段太长.确定小数的整数部分的长度是该操作的一部分.
小智 191
顺便说一下,(int)Decimal.MaxValue会溢出.你不能得到十进制的"int"部分,因为小数太大而无法放入int框中.刚刚检查过......它甚至太长了(Int64).
如果你想要一个十进制值的位到点的左边,你需要这样做:
Math.Truncate(number)
Run Code Online (Sandbox Code Playgroud)
并将值返回为...... DECIMAL或DOUBLE.
编辑:Truncate绝对是正确的功能!
取决于你在做什么。
例如:
//bankers' rounding - midpoint goes to nearest even
GetIntPart(2.5) >> 2
GetIntPart(5.5) >> 6
GetIntPart(-6.5) >> -6
Run Code Online (Sandbox Code Playgroud)
或者
//arithmetic rounding - midpoint goes away from zero
GetIntPart(2.5) >> 3
GetIntPart(5.5) >> 6
GetIntPart(-6.5) >> -7
Run Code Online (Sandbox Code Playgroud)
默认值始终是前者,这可能会令人惊讶,但非常有意义。
您的显式转换将执行以下操作:
int intPart = (int)343564564.5
// intPart will be 343564564
int intPart = (int)343564565.5
// intPart will be 343564566
Run Code Online (Sandbox Code Playgroud)
从你提出问题的方式来看,这听起来好像这不是你想要的——你每次都想把它打倒。
我会做:
Math.Floor(Math.Abs(number));
Run Code Online (Sandbox Code Playgroud)
还要检查你的大小decimal- 它们可能很大,所以你可能需要使用long.