Bagaimana cara membulatkan nilai ke bilangan bulat terdekat?
Sebagai contoh:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" tidak membantu saya. Ada ide?
Bagaimana cara membulatkan nilai ke bilangan bulat terdekat?
Sebagai contoh:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" tidak membantu saya. Ada ide?
Jawaban:
Lihat dokumentasi resmi untuk lebih lanjut. Sebagai contoh:
Pada dasarnya Anda memberikan Math.Round
metode tiga parameter.
Kode sampel:
var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3
Anda perlu MidpointRounding.AwayFromZero
jika Anda ingin nilai 0,5 untuk dibulatkan. Sayangnya ini bukan perilaku default untuk Math.Round()
. Jika menggunakan MidpointRounding.ToEven
(default), nilai dibulatkan ke bilangan genap terdekat ( 1.5
dibulatkan ke 2
, tetapi 2.5
juga dibulatkan ke 2
).
away from zero
juga berarti -1.5
akan membulatkan ke -2
.
Math.Ceiling
selalu membulat (menuju langit-langit)
Math.Floor
selalu membulatkan ke bawah (menuju ke lantai)
apa yang Anda kejar itu sederhana
Math.Round
yang bulat sesuai posting ini
Anda perlu Math.Round
, tidak Math.Ceiling
. Ceiling
selalu "membulatkan" ke atas, sedangkan Round
membulatkan ke atas atau ke bawah tergantung pada nilai setelah koma desimal.
ada manual ini, dan agak lucu juga:
double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;
int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);
cukup tambahkan 0,5 ke nomor apa saja, dan lemparkan ke int (atau floor itu) dan itu akan dibulatkan secara matematis dengan benar: D
Anda dapat menggunakan Math.Round seperti yang disarankan orang lain (disarankan), atau Anda dapat menambahkan 0,5 dan memasukkan int (yang akan menghilangkan bagian desimal).
double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1
double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2
Anda memiliki fungsi Math.Round yang melakukan apa yang Anda inginkan.
Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
1.5
dengan nilainya? Anda membutuhkan lebih banyak parameter.
Saya mencari ini, tetapi contoh saya adalah mengambil angka, seperti 4,2769 dan menjatuhkannya dalam rentang hanya 4,3. Tidak persis sama, tetapi jika ini membantu:
Model.Statistics.AverageReview <= it's just a double from the model
Kemudian:
@Model.Statistics.AverageReview.ToString("n1") <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2") <=gives me 4.28
dll ...
Penggunaan Math.Round
:
double roundedValue = Math.Round(value, 0)
var roundedVal = Math.Round(2.5, 0);
Ini akan memberikan hasil:
var roundedVal = 3
Jika Anda bekerja dengan bilangan bulat daripada bilangan floating point, inilah caranya.
#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))
Di sini "numr" dan "denr" adalah bilangan bulat tak bertanda.
Menggunakan Math.Round(number)
putaran ke bilangan bulat terdekat.
Tulis metode putaran Anda sendiri. Sesuatu seperti,
function round(x)
rx = Math.ceil(x)
if (rx - x <= .000001)
return int(rx)
else
return int(x)
end