获取十进制数的整数部分的最佳方法
什么是最好的方式来返回整数小数部分(在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