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

什么是最好的方式来返回整数小数部分(在C#中)? (这必须适用于非常大的数字,可能不适合int)。

GetIntPart(343564564.4342) >> 343564564 GetIntPart(-323489.32) >> -323489 GetIntPart(324) >> 324 

这样做的目的是:我插入数据库中的一个十进制(30,4)字段,并希望确保我不试图插入一个数字比太长的字段。 确定小数的整数部分的长度是这个操作的一部分。

顺便说一句,(int)Decimal.MaxValue会溢出。 你不能得到小数点的“int”部分,因为小数点太大而不能放在int框中。 刚刚检查…它甚至太长了(Int64)。

如果你想要十进制值的位左边的点,你需要这样做:

 Math.Truncate(number) 

并返回值为…一个DECIMAL或一个DOUBLE。

编辑:截断绝对是正确的function!

我想System.Math.Truncate是你在找什么。

取决于你在做什么。

例如:

 //bankers' rounding - midpoint goes to nearest even GetIntPart(2.5) >> 2 GetIntPart(5.5) >> 6 GetIntPart(-6.5) >> -6 

要么

 //arithmetic rounding - midpoint goes away from zero GetIntPart(2.5) >> 3 GetIntPart(5.5) >> 6 GetIntPart(-6.5) >> -7 

默认总是前者,这可能是一个惊喜,但非常有道理 。

你明确的演员将做:

 int intPart = (int)343564564.5 // intPart will be 343564564 int intPart = (int)343564565.5 // intPart will be 343564566 

从你说过这个问题的方式来看,这听起来不是你想要的 – 你想每次都把它放下。

我会做:

 Math.Floor(Math.Abs(number)); 

还要检查你的decimal的大小 – 它们可能相当大,所以你可能需要用很long

你只需要把它,如此:

 int intPart = (int)343564564.4342 

如果你仍然想在后面的计算中使用它作为一个小数,那么Math.Truncate(或者如果你想要一个负数的特定行为,可能是Math.Floor)是你想要的function。

非常简单的方法来分离价值及其小数部分价值。

 double d = 3.5; int i = (int)d; string s = d.ToString(); s = s.Replace(i + ".", ""); 

s是小数部分= 5和
我是值整数= 3

  Public Function getWholeNumber(number As Decimal) As Integer Dim round = Math.Round(number, 0) If round > number Then Return round - 1 Else Return round End If End Function