Làm cách nào để làm tròn giá trị thành số nguyên gần nhất?
Ví dụ:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" không giúp được gì cho tôi. Bất kỳ ý tưởng?
Làm cách nào để làm tròn giá trị thành số nguyên gần nhất?
Ví dụ:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" không giúp được gì cho tôi. Bất kỳ ý tưởng?
Câu trả lời:
Xem tài liệu chính thức để biết thêm. Ví dụ:
Về cơ bản, bạn cung cấp cho Math.Round
phương thức ba tham số.
Mã mẫu:
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
Bạn cần MidpointRounding.AwayFromZero
nếu bạn muốn giá trị .5 được làm tròn. Thật không may, đây không phải là hành vi mặc định cho Math.Round()
. Nếu sử dụng MidpointRounding.ToEven
(mặc định), giá trị được làm tròn đến số chẵn gần nhất ( 1.5
được làm tròn thành 2
, nhưng 2.5
cũng được làm tròn thành 2
).
away from zero
cũng có nghĩa là -1.5
sẽ làm tròn đến -2
.
Math.Ceiling
luôn luôn quay tròn (hướng lên trần nhà)
Math.Floor
luôn luôn tròn xuống (hướng xuống sàn)
những gì bạn đang theo đuổi chỉ đơn giản là
Math.Round
vòng nào theo bài đăng này
Bạn cần Math.Round
, không phải Math.Ceiling
. Ceiling
luôn luôn "làm tròn" lên, trong khi làm Round
tròn lên hoặc xuống tùy thuộc vào giá trị sau dấu thập phân.
có sách hướng dẫn này, và cũng khá dễ thương:
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);
chỉ cần thêm 0,5 vào bất kỳ số nào và chuyển nó thành int (hoặc tầng của nó) và nó sẽ được làm tròn chính xác về mặt toán học: D
Bạn có thể sử dụng Math.Round như những người khác đã đề xuất (được khuyến nghị) hoặc bạn có thể thêm 0,5 và ép kiểu thành int (sẽ giảm phần thập phân).
double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1
double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2
Bạn có hàm Math.Round thực hiện chính xác những gì bạn muốn.
Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
1.5
như giá trị thì sao? Bạn cần thêm thông số.
Tôi đang tìm kiếm điều này, nhưng ví dụ của tôi là lấy một số, chẳng hạn như 4,2769 và giảm nó trong một khoảng chỉ bằng 4,3. Không hoàn toàn giống nhau, nhưng nếu điều này sẽ giúp:
Model.Statistics.AverageReview <= it's just a double from the model
Sau đó:
@Model.Statistics.AverageReview.ToString("n1") <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2") <=gives me 4.28
Vân vân...
Sử dụng Math.Round
:
double roundedValue = Math.Round(value, 0)
var roundedVal = Math.Round(2.5, 0);
Nó sẽ cho kết quả:
var roundedVal = 3
Nếu bạn đang làm việc với số nguyên thay vì số dấu phẩy động, đây là cách.
#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))
Ở đây cả "numr" và "denr" đều là số nguyên không dấu.
Sử dụng Math.Round(number)
tròn đến số nguyên gần nhất.
Viết phương pháp vòng của riêng bạn. Cái gì đó như,
function round(x)
rx = Math.ceil(x)
if (rx - x <= .000001)
return int(rx)
else
return int(x)
end