Nguyên tắt xử lý số thập phân trong Apps Script

Nếu chỉ dừng lại ở thực hành về lập trình Apps Script thì bạn có thể xem nguyên tắt xử lý số thập phân trong Apps Script, nhưng khi vào làm phần mềm ứng dụng bạn cần chú ý.

  1. Số thập phân là gì ?
  2. Chuẩn số thập phân trong Apps Script
  3. Một số nguyên tắc quan trọng khi xử lý số thập phân trong Apps Script
  4. Kiến thức cần nắm khi xử lý số thập phân với Apps Script

1. Số thập phân là gì ?

Số thập phân là một số có phần nguyên và phần thập phân, được phân tách bởi dấu chấm thập phân (hoặc dấu phẩy trong một số hệ thống).

Tùy theo mỗi quốc gia mà có quy định khác nhau.

Ví dụ 1,5kg thịt thì 1,5 là số thập phân, dấu , là do quốc gia Việt Nam quy định, nhưng một số quốc gia khác có thể là dấu .

2. Chuẩn số tập phân trong Apps Script

Trong Google Apps Script, số thập phân (floating-point numbers) được xử lý theo nguyên tắc của JavaScript, mà JavaScript sử dụng chuẩn IEEE 754 cho phép biểu diễn các số thực. Điều này có thể dẫn đến một số vấn đề liên quan đến độ chính xác khi thực hiện các phép toán với số thập phân.

3. Một số nguyên tắc quan trọng khi xử lý số thập phân trong Apps Script

Nó cũng giống như Javascript

Vấn đề độ chính xác với số thập phân (Floating-Point Precision Issues)

Các phép toán với số thập phân trong JavaScript có thể không hoàn toàn chính xác do cách lưu trữ và tính toán các số thập phân theo chuẩn IEEE 754.

Ví dụ, một số giá trị như 0.1 không thể được biểu diễn chính xác trong hệ nhị phân, dẫn đến các kết quả bất ngờ khi tính toán.

Ví dụ:

var a = 0.1 + 0.2;
Logger.log(a);  // Kết quả sẽ là 0.30000000000000004, không phải 0.3

Trong ví dụ trên, kết quả mong muốn là 0.3, nhưng lại là 0.30000000000000004 do vấn đề về độ chính xác trong biểu diễn số thập phân.

Nhưng nó sẽ có cách xử lý coi như là lỗi vấn đề trên, nên các bạn yên tâm.

Sử dụng toFixed() để làm tròn kết quả

Để giải quyết vấn đề độ chính xác, một cách phổ biến là sử dụng phương thức toFixed() để làm tròn kết quả đến một số chữ số thập phân mong muốn. Phương thức này trả về một chuỗi, nên nếu bạn cần kết quả dưới dạng số, bạn phải chuyển đổi lại nó.
Ví dụ:

var a = 0.1 + 0.2;
var result = a.toFixed(2);  // Làm tròn đến 2 chữ số thập phân
Logger.log(result);         // "0.30" (chuỗi)
Logger.log(Number(result)); // 0.3 (số)

Trong ví dụ này, toFixed(2) làm tròn kết quả thành 0.30 và trả về nó dưới dạng chuỗi. Nếu bạn muốn tiếp tục xử lý như một số, bạn cần phải chuyển đổi lại bằng Number().

Sử dụng Math.round() để làm tròn số

Nếu bạn muốn làm tròn một số đến số nguyên gần nhất, bạn có thể sử dụng Math.round(). Tuy nhiên, để làm tròn số đến một số chữ số thập phân cụ thể, bạn cần kết hợp với phép nhân và chia.
Ví dụ:

Làm tròn số đến 2 chữ số thập phân:

var num = 2.56789;
var roundedNum = Math.round(num * 100) / 100;
Logger.log(roundedNum);  // 2.57

Giải thích:

    num * 100 di chuyển dấu thập phân hai chữ số sang bên phải.
    Math.round() làm tròn số.
    Sau đó, chia lại cho 100 để đưa dấu thập phân về đúng vị trí.

Sử dụng Math.floor() và Math.ceil()

Nếu bạn cần làm tròn xuống (floor) hoặc làm tròn lên (ceil) một số thập phân, bạn có thể sử dụng các phương thức Math.floor() và Math.ceil():

    Math.floor(): Làm tròn xuống (lấy số nguyên lớn nhất nhỏ hơn hoặc bằng số thực).
    Math.ceil(): Làm tròn lên (lấy số nguyên nhỏ nhất lớn hơn hoặc bằng số thực).

Ví dụ:

var num1 = 2.56789;
var num2 = 2.56789;

Logger.log(Math.floor(num1)); // 2
Logger.log(Math.ceil(num2));  // 3

Giới hạn số chữ số thập phân khi nhập và xuất dữ liệu

Khi bạn nhận dữ liệu từ người dùng hoặc từ các nguồn bên ngoài, hoặc khi xuất kết quả, bạn có thể muốn đảm bảo rằng chỉ có một số lượng chữ số thập phân nhất định được sử dụng để tránh sự bất thường trong hiển thị.
Ví dụ:

Nếu bạn nhận được giá trị thập phân từ người dùng và muốn giới hạn chỉ 2 chữ số thập phân:

var input = 123.45678;
var formattedInput = input.toFixed(2);  // Giới hạn 2 chữ số thập phân
Logger.log(formattedInput);             // "123.46"

Chú ý đến cách tính toán với số tiền hoặc đơn vị tiền tệ

Khi xử lý số tiền hoặc đơn vị tiền tệ, việc tính toán với số thập phân cần phải được làm tròn và chuẩn hóa cẩn thận, tránh các sai số nhỏ. Một cách phổ biến là làm việc với số nguyên (ví dụ, tính toán bằng đơn vị nhỏ nhất như xu hoặc hào) thay vì làm việc trực tiếp với số thập phân.
Ví dụ:

Thay vì làm việc trực tiếp với số tiền 2.5 (nghĩa là 2.5 đơn vị tiền tệ), bạn có thể làm việc với số xu (hoặc đơn vị nhỏ hơn):

var price = 2.5;  // 2.5 đơn vị tiền
var priceInCents = Math.round(price * 100);  // Chuyển đổi thành xu
Logger.log(priceInCents);  // 250 xu

// Sau đó, bạn có thể thực hiện các phép toán với xu
var total = priceInCents * 3;  // Tính tổng cho 3 sản phẩm
Logger.log(total);  // 750 xu (tương đương với 7.50 đơn vị tiền tệ)

3. Kiến thức cần nắm khi xử lý số thập phân với Apps Script

    Vấn đề chính khi xử lý số thập phân là độ chính xác không hoàn toàn trong các phép toán do cách biểu diễn số trong chuẩn IEEE 754.
    toFixed() và Math.round() là những công cụ hữu ích để kiểm soát độ chính xác và làm tròn số thập phân.
    Math.floor() và Math.ceil() có thể dùng để làm tròn xuống hoặc lên số thực.
    Khi xử lý tiền tệ hoặc đơn vị có độ chính xác cao, tốt nhất là sử dụng số nguyên (ví dụ: xu) thay vì số thập phân trực tiếp.


 

Tìm kiếm:

Bài viết liên quan:

Nếu chỉ dừng lại ở thực hành về lập trình Apps Script thì bạn có thể xem nguyên tắt xử lý số thập phân trong Apps Script, nhưng khi vào làm phần mềm ứng dụng bạn cần chú ý.