Nhân 2 số trong javascript

Hi all, mình có bài tập như sau:

Mình đã viết functuion như dưới nhưng kết quả trả về sai. Bạn nào biết mình sai ở đâu không ạ. Giúp mình với ạ. Mình cảm ơn.

function mul(a, b) {
    if (isNaN(a)) {
        return 'a must be number.';
    }
    if (isNaN(b)) {
        return 'b must be number.';
    }
    if (b < 1 || b > 99) {
        return 'The second number must be from 1 to 99';
    }
    return   BigInt(a * b) ;
}

console.log(mul(12345678910111213, 89))  // return 1098765422999897856
console.log(mul(12345678910111213, 89) == '1098765422999897957') // false

Bạn dùng sai rồi.
Có thấy là bạn vẫn nhân 2 số bình thường với nhau hay không?

2 số nhân với nhau (số lớn => sai) rồi mới chuyển sang BigInt (sai -> BigInt sai).

Thao tác đúng là:

  • a thành BigInt.
  • b thành BigInt.
  • 2 BigInt vừa nhận được nhân với nhau.
4 Likes

Vẫn không đúng bạn mình đã thử đổi thành BigInt(a )* BigInt(b) rồi nhưng lại trả về là 1098765422999897868n vẫn không phải kết quả mong muốn

Mình lấy ví dụ đề bài luôn:

var x = BigInt("12345678910111213") * BigInt("89"); // Chuỗi
console.log(x.toString());

Kết quả:

"1098765422999897957"

Nên nhớ, số cực lớn thì biểu diễn bằng chuỗi (string) chứ không viết thường được.
Chạy thử: https://jsconsole.com/?x%20%3D%20BigInt("12345678910111213")%20*%20BigInt("89")%3B%20console.log(x.toString())%3B

4 Likes

à mình thấy rồi. cái biến a mình truyền vào function là 12345678910111213 tuy nhiện nó lại nhận là 12345678910111212

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?