Apa cara terbaik untuk mengembalikan seluruh bagian bilangan desimal (dalam c #)? (Ini harus bekerja untuk bilangan yang sangat besar yang mungkin tidak cocok dengan int).
GetIntPart(343564564.4342) >> 343564564
GetIntPart(-323489.32) >> -323489
GetIntPart(324) >> 324
Tujuan dari ini adalah: Saya memasukkan ke dalam bidang desimal (30,4) di db, dan ingin memastikan bahwa saya tidak mencoba memasukkan angka yang terlalu panjang untuk bidang tersebut. Menentukan panjang bagian bilangan bulat dari desimal adalah bagian dari operasi ini.
Jawaban:
Ngomong-ngomong, (int) Decimal.MaxValue akan meluap. Anda tidak bisa mendapatkan bagian "int" dari desimal karena desimalnya terlalu besar untuk dimasukkan ke dalam kotak int. Baru saja memeriksa ... bahkan terlalu besar untuk waktu yang lama (Int64).
Jika Anda ingin sedikit nilai Desimal di sebelah KIRI titik, Anda perlu melakukan ini:
dan mengembalikan nilai sebagai ... SEBUAH DESIMAL atau GANDA.
edit: Truncate jelas merupakan fungsi yang benar!
sumber
Saya pikir System.Math.Truncate adalah apa yang Anda cari.
sumber
Tergantung pada apa yang Anda lakukan.
Misalnya:
//bankers' rounding - midpoint goes to nearest even GetIntPart(2.5) >> 2 GetIntPart(5.5) >> 6 GetIntPart(-6.5) >> -6
atau
//arithmetic rounding - midpoint goes away from zero GetIntPart(2.5) >> 3 GetIntPart(5.5) >> 6 GetIntPart(-6.5) >> -7
Defaultnya selalu yang pertama, yang bisa menjadi kejutan tetapi sangat masuk akal .
Pemeran eksplisit Anda akan melakukan:
int intPart = (int)343564564.5 // intPart will be 343564564 int intPart = (int)343564565.5 // intPart will be 343564566
Dari cara Anda mengucapkan pertanyaan, sepertinya ini bukan yang Anda inginkan - Anda ingin melontarkannya setiap saat.
Saya akan melakukan:
Periksa juga ukurannya
decimal
- ukurannya bisa sangat besar, jadi Anda mungkin perlu menggunakan filelong
.sumber
Anda hanya perlu mentransmisikannya, seperti:
int intPart = (int)343564564.4342
Jika Anda masih ingin menggunakannya sebagai desimal dalam perhitungan selanjutnya, maka Math.Truncate (atau mungkin Math.Floor jika Anda menginginkan perilaku tertentu untuk bilangan negatif) adalah fungsi yang Anda inginkan.
sumber
Cara yang sangat mudah untuk memisahkan nilai dan nilai bagian pecahannya.
double d = 3.5; int i = (int)d; string s = d.ToString(); s = s.Replace(i + ".", "");
s adalah pecahan bagian = 5 dan
i adalah nilai sebagai integer = 3
sumber
(int)Decimal.MaxValue
akan meluap.Saya harap membantu Anda.
/// <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)); }
sumber
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
sumber
decimal
jauh lebih besar daripadaint
. Juga, ini bukan pertanyaan tentang VB.