Hướng dẫn javascript check if division has remainder - javascript kiểm tra xem phép chia có dư không

Tôi đang xây dựng một giỏ hàng nặng về tính toán cho một cửa hàng vải và thấy mình cần phải tính toán trên chiều dài nhập của người dùng * Baseprice trên mét, nhưng sau đó kiểm tra kết quả để xem đó có phải là bội số của chiều dài mẫu không. Nếu nó không phải là bội số, tôi cần tìm bội số gần nhất của chiều dài mẫu và thay đổi kết quả thành đó.

Tôi cũng cần có thể thực hiện chính xác cùng một tính toán trong PHP, nhưng nếu bất cứ ai có thể giúp tôi với các toán học, tôi có thể chuyển bất cứ thứ gì cần được tự dịch.

Tôi đang sử dụng JQuery 1.6.2 và đã thực hiện phần đầu tiên của phép tính, tôi chỉ cần kiểm tra kết quả của (giá*giá) so với độ dài mẫu.

Bất kỳ sự giúp đỡ nào được đánh giá rất cao

Chỉnh sửa: Những tính toán này đều liên quan đến 2 số thập phân cho cả giá và chiều dài mẫu. Độ dài đầu vào của người dùng cũng có thể chứa số thập phân.

Hỏi ngày 12 tháng 8 năm 2011 lúc 9:08Aug 12, 2011 at 9:08

Hướng dẫn javascript check if division has remainder - javascript kiểm tra xem phép chia có dư không

4

Sử dụng toán tử

//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
0 (mô đun) trong JavaScript và PHP, trả về phần còn lại khi
//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
1 được chia cho
//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
2 trong
//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
3. Phần còn lại sẽ bằng không khi
//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
1 là bội số của
//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
2.

Ex.

//Javascript
var result = userLength * basePrice;     //Get result
if(result % patternLength){              //Check if there is a remainder
  var remainder = result % patternLength; //Get remainder
  if(remainder >= patternLength / 2)      //If the remainder is larger than half of patternLength, then go up to the next mulitple
    result += patternLength - remainder;
  else                                    //Else - subtract the remainder to go down
    result -= remainder;
}
result = Math.round(result * 100) / 100;  //Round to 2 decimal places

Đã trả lời ngày 12 tháng 8 năm 2011 lúc 9:21Aug 12, 2011 at 9:21

Máy bay kế hoạch kỹ thuật sốDigital Plane

36,6K7 Huy hiệu vàng56 Huy hiệu bạc59 Huy hiệu Đồng7 gold badges56 silver badges59 bronze badges

3

Bạn có thể sử dụng mô đun để tìm phần còn lại sau một bộ phận và sau đó nếu phần còn lại bằng 0 thì đó là bội số.

//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}

Nếu các số bạn sử dụng có thể là 2DP, mô đun vẫn sẽ hoạt động, nếu không, nhân cả hai với 100 trước sau đó thực hiện kiểm tra trên.

Hướng dẫn javascript check if division has remainder - javascript kiểm tra xem phép chia có dư không

Đã trả lời ngày 12 tháng 8 năm 2011 lúc 9:17Aug 12, 2011 at 9:17

1

Điều này tránh các vấn đề chính xác của JavaScript (nếu yếu tố của bạn

//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
6 có ít hơn 5 số thập phân).

function isMultiple(x, y) {
    return Math.round(x / y) / (1 / y) === x;
}

Thuật toán trên sẽ thất bại cho các yếu tố rất nhỏ

Nếu bạn đang làm việc với các giá trị khoa học, hãy sử dụng Big.js.

function decimalPlaces(x) {
    const str = ''+ +x;
    const dindex = str.indexOf('.');
    const eindex = str.indexOf('e');
    return (
        (dindex < 0 ? 0 : (eindex < 0 ? str.length : eindex) - dindex - 1) +
        (eindex < 0 ? 0 : Math.max(0, -parseInt(str.slice(eindex + 1)))));
}

function isMultiple(x, y) {
    const xplaces = decimalPlaces(x);
    const yplaces = decimalPlaces(y);
    if (xplaces > yplaces) {
        return false;
    }
    const pfactor = Math.pow(10, yplaces);
    return Math.round(pfactor * x) % Math.round(pfactor * y) === 0;
}

[
    [2.03, 0.01],
    [2.03, 0.0123],
    [2.029999999999, 0.01],
    [2.030000000001, 0.01],
    [0.03, 0.01],
    [240, 20],
    [240, 21],
    [1, 1],
    [4, 2],
    [6, 3],
    [6, 4],
    [1.123456, 0.000001]
].forEach(([number, multiple]) => {
    const result = isMultiple(number, multiple);
    console.log(`isMultiple (${number}, ${multiple}) =`, result);
});

Đã trả lời ngày 17 tháng 10 năm 2019 lúc 20:54Oct 17, 2019 at 20:54

Adam Leggettadam LeggettAdam Leggett

3.40829 Huy hiệu bạc23 Huy hiệu đồng29 silver badges23 bronze badges

Trong JavaScript có toán tử còn lại (tương tự như hầu hết các ngôn ngữ có cú pháp giống C).

Đặt x = length và y = price và z = sản phẩm của x*y

var remainder = (z % x) / 100;

if (remainder === 0) {
   // z is a multiple of x
}

Để có được số x gần nhất với kết quả Z của bạn, bạn có thể làm tròn kết quả (hoặc xuống) bằng cách sử dụng các hàm trần hoặc sàn trong thư viện toán học.

if (r >= x / 2) {
    a = Math.ceil(z/x)*x;
}
else {
    a = Math.floor(z/x)*x;
}

Sau đó tròn đến hai vị trí thập phân

Math.round(a / 100) * 100;

Đã trả lời ngày 12 tháng 8 năm 2011 lúc 9:19Aug 12, 2011 at 9:19

Peter Kellypeter KellyPeter Kelly

14.1k6 Huy hiệu vàng52 Huy hiệu bạc62 Huy hiệu Đồng6 gold badges52 silver badges62 bronze badges

Không chắc chắn nếu tôi thực sự hiểu nhiệm vụ vì nó có vẻ khá đơn giản với tôi, nhưng hãy xem mã PHP này:

// --- input ---
$pattern = 12.34;
$input = 24.68;
$precision = 2; // number of decimals

// --- calculation ---

// switch to "fixed point":
$base = pow(10, $precision);
$pattern = round($pattern * $base);
$input = round($input * $base);

if ($input % $pattern) {
  // not an exact multiple
  $input = ceil($input / $pattern) * $pattern;
} else {
  // it is an exact multiple
}

// back to normal precision:
$pattern /= $base;
$input /= $base;

Điều này có thể dễ dàng dịch sang JavaScript.

//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
8 sẽ là bội số gần nhất tiếp theo của mẫu. Nếu bạn chỉ cần điều đó và không cần biết liệu nó có thực sự là bội số, bạn cũng có thể chỉ cần làm điều gì đó như thế này:

$input = ceil($input * 100 / $pattern) * $pattern / 100;

Đã trả lời ngày 12 tháng 8 năm 2011 lúc 9:19Aug 12, 2011 at 9:19

Peter Kellypeter KellyUdo G

14.1k6 Huy hiệu vàng52 Huy hiệu bạc62 Huy hiệu Đồng11 gold badges54 silver badges87 bronze badges

//roundDown to 2 decimal places function
function r2(n) {
   return Math.floor(n*100)/100; 
}

neededLength = 4.55;
price = 4.63;
patternLength = 1.6;

// price despite the length of the pattern
priceSum = r2(neededLength * price);

// calculate how many pattern lengths there must be to fit into needed length
patternLengths = Math.floor((neededLength+patternLength)/patternLength);
// calculate price for pattern lengths
priceByPatternSum = r2((patternLengths * patternLength) * price );

Không chắc chắn nếu tôi thực sự hiểu nhiệm vụ vì nó có vẻ khá đơn giản với tôi, nhưng hãy xem mã PHP này:Aug 12, 2011 at 9:38

Điều này có thể dễ dàng dịch sang JavaScript.vellotis

//x and y are both integers
var remainder = x % y;
if (remainder == 0){
//x is a multiple of y
} else {
//x is not a multiple of y
}
8 sẽ là bội số gần nhất tiếp theo của mẫu. Nếu bạn chỉ cần điều đó và không cần biết liệu nó có thực sự là bội số, bạn cũng có thể chỉ cần làm điều gì đó như thế này:1 gold badge11 silver badges26 bronze badges

Toán tử Modulo (%) mục đích trong JavaScript là gì?

Toán tử mô đun ( %) trả về phần còn lại của bộ phận.

Nhà điều hành nào trả về phần còn lại?

Toán tử // (phần còn lại) trả về phần còn lại từ phân chia số nguyên và được định nghĩa là dư lượng của cổ tức sau khi hoạt động tính toán phân chia số nguyên như mô tả trước đây.Dấu hiệu của phần còn lại, nếu khác không, giống như cổ tức ban đầu.// (remainder) operator returns the remainder from integer division and is defined as being the residue of the dividend after the operation of calculating integer division as previously described. The sign of the remainder, if nonzero, is the same as that of the original dividend.