Hướng dẫn how to multiply decimals in javascript - cách nhân số thập phân trong javascript

Người vận hành "*" và "/" không hoạt động hoàn toàn luôn luôn, ví dụ:

32.09 * 100 = 3209.0000000000005
100 / (1 / 32.09) = 3209.0000000000005

Solution:

Một giải pháp, một giải pháp dễ dàng, có số thập phân là sử dụng .Tofixed (2) trong đó "2" là số chữ số thập phân mà bạn muốn. Nhưng bạn phải tính đến điều này trả lại cho bạn một chuỗi và nó làm tròn giá trị.

45.6789.toFixed(2) —> "45.68" as String

Tùy chọn khác, hoàn chỉnh nhất, là sử dụng .Tolocalestring chuyển đổi số đúng thành mã quốc gia mà bạn muốn. Bạn có thể đặt một cặp tham số để sửa các giá trị số thập phân luôn thành 2. Điều này cũng trả cho bạn một chuỗi:

(654.3453).toLocaleString(
  'en-US',
  {minimumFractionDigits: 2, maximumFractionDigits: 2},
) —> "654.35" as String

Nếu bạn cần nó làm số, bạn có thể bọc nó thành số (...):

Number((654.3453).toLocaleString(
  'en-US',
  {minimumFractionDigits: 2, maximumFractionDigits: 2},
)) —> 654.35 as Number

Nếu bạn chỉ muốn một số thập phân, hãy sử dụng một trong các phương pháp này để chắc chắn rằng kết quả là không có số thập phân.

Math.trunc(32.09); —> 32 as Number  
(32.09).toFixed(0); —> “32” as String
32.09 | 0; —> 32 as Number

JavaScript có lỗi khi nhân số thập phân, hãy tự mình thử:

0.1 * 0.2
> 0.020000000000000004 // NodeJS 0.8

Cách để sửa điều này là nhân số thập phân trước nhiều giá trị của chúng, hãy tự mình thử:

( 0.1 * 10 + 0.2 * 10 ) / 10
> 0.3

Bạn có thể tạo một chức năng cho việc này:

function multdec ( val1, val2 ) {
    return ( val1 * 10 + val2 * 10 ) / 10;
}

Bạn có thể mở rộng đối tượng toán học:

Math.multdec = function ( val1, val2 ) {
    return ( val1 * 10 + val2 * 10 ) / 10;
}

Bây giờ bạn có thể gọi hoạt động này theo hai cách:

multdec( val1, val2 );  // 0.3
// or
Math.multdec ( val1, val2 );  // 0.3

Trang này trông đẹp nhất với JavaScript được bật

Mọi thứ luôn không phải là cách chúng xuất hiện. Đặc biệt là khi nói đến phép nhân số thập phân trong JavaScript.

Xem xét -

Nhân số trên với

45.6789.toFixed(2) —> "45.68" as String
4. So sánh với câu trả lời dự kiến ​​chỉ để đảm bảo bạn không thấy câu trả lời sai.

45.6789.toFixed(2) —> "45.68" as String
0
45.6789.toFixed(2) —> "45.68" as String
1

Điều này xảy ra bởi vì JavaScript coi tất cả các số của nó là số điểm nổi và toán học nhị phân của chúng không thể biểu thị chính xác các số có mẫu số không chia hết cho 2.

Xem bài viết Stackoverflow tuyệt vời này để giải thích. Và, xem điều này bởi tác giả của câu trả lời được chọn.

Excerpt:

Toán học nổi nhị phân là như thế này. Trong hầu hết các ngôn ngữ lập trình, nó dựa trên tiêu chuẩn IEEE 754. JavaScript sử dụng biểu diễn điểm nổi 64 bit, giống như đôi Java Java. Mấu chốt của vấn đề là các con số được biểu diễn trong định dạng này như toàn bộ số lần có sức mạnh của hai; Các số hợp lý (chẳng hạn như 0,1, là 1/10) có mẫu số không phải là sức mạnh của hai người không thể được thể hiện chính xác.

Đối với 0,1 ở định dạng nhị phân tiêu chuẩn64, đại diện có thể được viết chính xác là 0.100000000000000005511151231257827021181583404541015625 trong thập phân, hoặc 0x1.9999999999 Ngược lại, số lượng hợp lý 0,1, là 1/10, có thể được viết chính xác là 0,1 trong thập phân, tổng số 0,1 và 0,2 tăng lên lớn hơn số lượng hợp lý 0,3 và do đó không đồng ý với hằng số trong mã của bạn.

Để biết một lời giải thích dễ tiêu hóa hơn (của số học điểm nổi), xem [Floating-point-gui.de].

Tất cả các hệ thống số vị trí (cơ sở-N) chia sẻ vấn đề này với độ chính xác. Số thập phân cũ (cơ sở 10) có cùng vấn đề, đó là lý do tại sao các số như 1/3 kết thúc là 0,333333333.

Bản sửa lỗi đơn giản nhất là các số vòng.

45.6789.toFixed(2) —> "45.68" as String
2
45.6789.toFixed(2) —> "45.68" as String
3

Một cách khác để giải quyết vấn đề này là thực hiện các tính toán sau khi chuyển đổi số thập phân sang số nguyên thông qua tỷ lệ. Ví dụ: 3.14 = 314. Bây giờ thực hiện tất cả các tính toán với 314.

Phương pháp tỷ lệ đặc biệt hữu ích nếu bạn đang thực hiện các tính toán liên quan đến tiền - chuyển đổi mọi thứ thành mệnh giá thấp nhất và thực hiện các tính toán.


Hướng dẫn how to multiply decimals in javascript - cách nhân số thập phân trong javascript

ĐƯỢC VIẾT BỞI

Prashanth Krishnamurthy

Công nghệ học | Người tạo ra sự vật