43
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Làm thế nào tôi có thể làm tròn một số lên bội số gần nhất của 3?
i.e.
25 would return 27
1 would return 3
0 would return 3
6 would return 6
RBT
22.3K20 Huy hiệu vàng151 Huy hiệu bạc219 Huy hiệu đồng20 gold badges151 silver badges219 bronze badges
hỏi ngày 15 tháng 7 năm 2010 lúc 9:04Jul 15, 2010 at 9:04
2
if[n > 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
Đã trả lời ngày 15 tháng 7 năm 2010 lúc 9:06Jul 15, 2010 at 9:06
CambiumcambiumCambium
18.8K3 Huy hiệu vàng25 Huy hiệu bạc19 Huy hiệu đồng3 gold badges25 silver badges19 bronze badges
9
Simply:
3.0*Math.ceil[n/3.0]
?
Bobby Jack
15.4K12 Huy hiệu vàng64 Huy hiệu bạc96 Huy hiệu Đồng12 gold badges64 silver badges96 bronze badges
Đã trả lời ngày 25 tháng 2 năm 2014 lúc 11:27Feb 25, 2014 at 11:27
Iwan B.Iwan B.Iwan B.
3.6862 Huy hiệu vàng25 Huy hiệu bạc18 Huy hiệu Đồng2 gold badges25 silver badges18 bronze badges
5
Của bạn đây!
Number.prototype.roundTo = function[num] {
var resto = this%num;
if [resto 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
7 là 0, vì đó có thể là một sai lầm của OP.]Trong số chín câu trả lời được đăng trước câu trả lời này [chưa bị xóa hoặc không có điểm thấp đến mức chúng không thể nhìn thấy đối với tất cả người dùng], chỉ có những người của Dean Nicholson [ngoại trừ vấn đề mất ý nghĩa] và Beauburrier là chính xác. Câu trả lời được chấp nhận cho kết quả sai cho các số âm và nó thêm một ngoại lệ cho 0 để tính đến những gì có thể là một sai lầm của OP. Hai câu trả lời khác làm tròn một số đến bội số gần nhất thay vì luôn làm tròn, một câu trả lời nữa cho kết quả sai cho các số âm và ba thậm chí còn cho kết quả sai cho các số dương.
Đã trả lời ngày 16 tháng 6 năm 2016 lúc 10:53Jun 16, 2016 at 10:53
Nisetamanisetamanisetama
6.7181 Huy hiệu vàng32 Huy hiệu bạc20 Huy hiệu đồng1 gold badge32 silver badges20 bronze badges
1
Hàm này sẽ làm tròn đến bội số gần nhất của bất kỳ yếu tố nào bạn cung cấp. Nó sẽ không làm tròn 0 hoặc số đã được bội số.
round_up = function[x,factor]{ return x - [x%factor] + [x%factor>0 && factor];}
round_up[25,3]
27
round up[1,3]
3
round_up[0,3]
0
round_up[6,3]
6
Hành vi cho 0 không phải là những gì bạn yêu cầu, nhưng có vẻ phù hợp và hữu ích hơn theo cách này. Nếu bạn muốn làm tròn 0 mặc dù, chức năng sau đây sẽ làm điều đó:
round_up = function[x,factor]{ return x - [x%factor] + [ [x%factor>0 || x==0] && factor];}
round_up[25,3]
27
round up[1,3]
3
round_up[0,3]
3
round_up[6,3]
6
Đã trả lời ngày 4 tháng 4 năm 2012 lúc 19:56Apr 4, 2012 at 19:56
Beauburrierbeauburrierbeauburrier
1.3691 Huy hiệu vàng16 Huy hiệu bạc18 Huy hiệu đồng1 gold badge16 silver badges18 bronze badges
Dựa trên cách tiếp cận của @makram và kết hợp các nhận xét tiếp theo của @Adam, tôi đã sửa đổi ví dụ về toán học gốc.
Number.prototype.mround = function[_mult, _zero] {
var bias = _zero || false;
var base = Math.abs[this];
var mult = Math.abs[_mult];
if [bias == true] {
base = Math.round[base / mult] * _mult;
base = [this 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
0 if[n > 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
1Đã trả lời ngày 17 tháng 5 năm 2016 lúc 14:01May 17, 2016 at 14:01
CAK2CAK2CAK2
1.7421 Huy hiệu vàng14 Huy hiệu bạc17 Huy hiệu đồng1 gold badge14 silver badges17 bronze badges
0
Một câu trả lời chung hơn có thể giúp ai đó có vấn đề chung hơn: Nếu bạn muốn làm tròn số thành bội số của một phân số, hãy xem xét sử dụng thư viện. Đây là một trường hợp sử dụng hợp lệ trong GUI trong đó số thập phân được gõ vào đầu vào và ví dụ bạn muốn ép chúng thành bội số 0,25, 0,2, 0,5, v.v. Sau đó, cách tiếp cận ngây thơ sẽ không đưa bạn đi xa:
if[n > 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
2Sau nhiều giờ cố gắng viết lên chức năng của riêng tôi và tìm kiếm các gói NPM, tôi đã quyết định rằng Decimal.js đã hoàn thành công việc ngay lập tức. Nó thậm chí còn có một phương thức
if[n > 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
8 thực hiện chính xác điều đó và bạn có thể chọn làm tròn, xuống hoặc để gần hơn giá trị [mặc định]. if[n > 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
3Ví dụ Runkit
Đã trả lời ngày 28 tháng 8 năm 2019 lúc 21:54Aug 28, 2019 at 21:54
Adam Jagoszadam JagoszAdam Jagosz
1.38413 Huy hiệu bạc12 Huy hiệu đồng13 silver badges12 bronze badges
Sử dụng toán tử còn lại [mô đun]:
if[n > 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
4Đã trả lời ngày 20 tháng 9 năm 2020 lúc 22:03Sep 20, 2020 at 22:03
Vanowmvanowmvanowm
8.4842 Huy hiệu vàng17 Huy hiệu bạc33 Huy hiệu đồng2 gold badges17 silver badges33 bronze badges
Bằng mã được đưa ra dưới đây, sử dụng có thể thay đổi bất kỳ số nào và bạn có thể tìm thấy bất kỳ bội số nào của bất kỳ số nào
if[n > 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
5Đã trả lời ngày 15 tháng 9 lúc 9:10Sep 15 at 9:10
if[n > 0]
return Math.ceil[n/3.0] * 3;
else if[ n < 0]
return Math.floor[n/3.0] * 3;
else
return 3;
6Đã trả lời ngày 15 tháng 7 năm 2010 lúc 9:45Jul 15, 2010 at 9:45
JamesjamesJames
64.4K14 Huy hiệu vàng153 Huy hiệu bạc191 Huy hiệu đồng14 gold badges153 silver badges191 bronze badges
3