أفضل طريقة للحصول على رقم جزء كامل من عدد عشري
سؤال
ما هو أفضل وسيلة لإرجاع عدد جزء كامل من عشري (في ج #)؟ (وهذا له للعمل لأعداد كبيرة جدا التي قد لا تنسجم مع عدد صحيح).
GetIntPart(343564564.4342) >> 343564564
GetIntPart(-323489.32) >> -323489
GetIntPart(324) >> 324
والغرض من هذا هو: أنا إدخالها في عشري (30،4) في ميدان ديسيبل، وتريد التأكد من أنني لا محاولة إدراج عدد من طويل جدا للحقل. تحديد طول رقم جزء كامل من عشري هو جزء من هذه العملية.
المحلول
وبالمناسبة الرجال، (الباحث) Decimal.MaxValue سيتم تجاوز. لا يمكنك الحصول على جزء "الباحث" من عشري لأن عشري هو friggen جدا كبير وضعه في مربع كثافة العمليات. فقط التحقق ... لها حتى كبيرة جدا لفترة طويلة (Int64).
إذا كنت تريد شيئا من القيمة العشرية إلى يسار النقطة، تحتاج إلى القيام بذلك:
Math.Truncate(number)
ووالعودة القيمة ك ... عشري أو مزدوجة.
تحرير: اقتطاع هو بالتأكيد وظيفة الصحيحة م>
نصائح أخرى
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
والافتراضي هو دائما في السابق، والتي يمكن أن تكون مفاجأة ولكن <لأ href = "http://bizvprog.blogspot.com/2008/01/computers-didnt-learn-rounding-at.html" يختلط = " نوفولو noreferrer "> يجعل جيد جدا الشعور .
ويلقي صريحة ستفعل:
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 إذا كنت ترغب في سلوك معين للأرقام السالبة) هي وظيفة تريد.
وطريقة سهلة جدا لقيمة منفصلة وقيمته جزء كسور.
double d = 3.5;
int i = (int)d;
string s = d.ToString();
s = s.Replace(i + ".", "");
والصورة هي جزء كسري = 5 و
i غير قيمة عدد صحيح = 3
وآمل مساعدتك.
/// <summary>
/// Get the integer part of any decimal number passed trough a string
/// </summary>
/// <param name="decimalNumber">String passed</param>
/// <returns>teh integer part , 0 in case of error</returns>
private int GetIntPart(String decimalNumber)
{
if(!Decimal.TryParse(decimalNumber, NumberStyles.Any , new CultureInfo("en-US"), out decimal dn))
{
MessageBox.Show("String " + decimalNumber + " is not in corret format", "GetIntPart", MessageBoxButtons.OK, MessageBoxIcon.Error);
return default(int);
}
return Convert.ToInt32(Decimal.Truncate(dn));
}
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