获得十进制数的整数部分的最佳方法

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绝对是正确的功能!


Mar*_*ter 23

我认为System.Math.Truncate就是你要找的东西.


Kei*_*ith 5

取决于你在做什么。

例如:

//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.