方案
我有房间预订表。
以下所有字段均为整数
roomsneeded
(需要的总房间数......根据maxguest计算)
maxguest
(每间客房允许的最大客人数)
checkin_guest_count
(需要房间的总人数)
maxguest increases/decreases
我需要increase/decrease
roomsneeded
。
因此,请记住以下内容,制作example
让我们说maxguest=3
和checkin_guest_count=17
..那么如何计算roomsneeded
?
这里modulus
有用,因为我不是在寻找exact divisibles
吗?
我正试图在
javascript
上实现这一点(但寻找基本的 关于所需数学的想法)
答案 0 :(得分:3)
而不是检查数字是否可以完全整除 - 假设您的房间中的占用者数量少于最大数量 - 只需使用Math.ceil()
:
var roomsNeeded = Math.ceil( checkin_guest_count / maxguest );
// 17 / 3 => 5.6...
// Math.ceil( 17 / 3 ) => 6
以下概念证明:
function calculate() {
// retrieving the various values required for the
// calculation:
var checkin_guest_count = document.getElementById('checkin_guest_count').value,
maxguest = document.getElementById('maxguest').value,
result = document.getElementById('result'),
// dividing the number of guests by the maximum
// number of guests per room, and then rounding
// that value up to the nearest integer (eg
// Math.ceil(5.1) will return 6):
numRooms = Math.ceil(checkin_guest_count / maxguest);
// here we update the value of the 'result' node
// to either the numRooms value (if numRooms is a
// finite number, so we haven't tried to divide by
// zero) or to 0 if the numRooms is infinite:
result.value = Number.isFinite(numRooms) ? numRooms : 0;
return numRooms;
}
// retrieving the collection of <input> elements whose
// type attribute is 'number', and converting that collection
// to an Array (using Array.from()):
var inputs = Array.from(document.querySelectorAll('input[type = number]'));
// iterating over the Array using Array.prototype.forEach():
inputs.forEach(function(input) {
// binding the named function calcuate() (note the lack of
// parentheses in the event-binding) as the event-handler
// for the 'change' event:
input.addEventListener('change', calculate);
});
&#13;
label {
display: block;
margin: 0 0 0.2em 0;
}
label span {
display: inline-block;
width: 50%;
text-align: right;
}
label span::after {
content: ': ';
}
label span + input {
width: 20%;
}
&#13;
<label><span>Number of guests</span>
<input type="number" id="checkin_guest_count" step="1" />
</label>
<label><span>Maximum guests per room</span>
<input type="number" id="maxguest" step="1" min="1" />
</label>
<label><span>Number of rooms</span>
<input type="number" id="result" readonly />
</label>
&#13;
参考文献:
答案 1 :(得分:1)
您可以这样做:
roomsneeded = Math.cell(checkin_guest_count / maxguest);
Math.ceil()将数字四舍五入到最接近的整数
答案 2 :(得分:1)
我试图在javascript上实现这一点(但寻找基本的 关于所需数学的想法)
所以基本上你需要的房间总是:
var rooms_needed = Math.ceil(checkin_guest_count/maxguest);
任何超过最大容量的客人都应该获得另一个房间。
答案 3 :(得分:1)
我会做这样的事情:
var maxguest = 3; //magic number?
var checkin_guest_count = 17; //magic number?
function roomsneeded(maxGuest, checkinGuestCount) {
if (maxGuest > 0) { // Dividing by zero creates black holes
return Math.ceil(checkinGuestCount / maxGuest); //Math.ceil => round to highest int
} else return 0;
}
alert(roomsneeded(maxguest, checkin_guest_count));
答案 4 :(得分:0)
整数除法应该给你17/3 = 5。然后如果17 mod 3大于0,则需要再多一个房间(5 + 1)。
答案 5 :(得分:0)
您可以使用此方案检查一个整数是否可以被另一个整除:
if( !(int1 % int2) ) {
/* Your cool code here */
}
你不需要任何其他东西
答案 6 :(得分:0)
如果人们偏好他们想要自己的个人房间而他们可以与其他人共用房间并不算数,那么你可以为每个房间填充它可以容纳的最大人数,这意味着房间的总数您乘以每间客房允许的最大客人人数应等于客人总数。
rooms * max_guests = total_guests
暗示
rooms = total_guests/max_guests
从那以后,房间的数量不能是分数,你必须采取上限。
如果每位客人都喜欢他们想要独处,那么你必须采取最糟糕的情况,这意味着房间的总数等于客人的数量。
rooms = total_guests
注意:模数给出了除法后的残差,你可以使用模数来表示是否在方法1中除法后保留的商数加1。
如果是total_guests % max_guests != 0
,则在整个房间中加1。