Làm cách nào để tôi căn chỉnh số thập phân trong Google Sheets


13

Trong Google Sheets, tôi muốn căn chỉnh các số thập phân mà không cần thêm các số 0 ở cuối phân số.

Instead of:  I want:
+------+     +------+
|  56.0|     |  56  |
|  27.0|     |  27  |
|  83.0|     |  83  |
|   2.4|     |   2.4|
|   1.2|     |   1.2|
| 120.0|     | 120  |
+------+     +------+

Định dạng của cột đầu tiên có thể dễ dàng thực hiện (ví dụ: sử dụng định dạng "0,0" hoặc chỉ đặt các dấu thập phân tùy chỉnh dưới nút 123).

Trong Excel, tôi tin rằng định dạng của cột thứ hai được thực hiện bằng định dạng "0.?", Nhưng khi viết bài này, nó không hoạt động trong Google Sheets.

Cách giải quyết

Có thể buộc các ký tự theo sau với Thay thế:

= Substitute( Text( formula ; "0.0" ) ; ".0" ; "  ")
= Substitute( Text( formula ; "0.0" ) ; ".0" ; "__" )

Lưu ý: hai ký tự khoảng trắng được thay thế không phải là U + 0020 SPACE mà là U + 2002 EN SPACE . ( KHÔNG GIAN U + 00A0 NO-BREAK cũng hoạt động.)

Một số tác dụng phụ không mong muốn của cách giải quyết này là nó

  • sửa đổi không chỉ định dạng hiển thị mà cả giá trị của ô
  • yêu cầu sử dụng phông chữ đơn cách trong ô
  • khoảng trắng theo sau gây ra sự thay thế phông chữ do Unicode và không in đúng
  • dấu gạch chân không được mong muốn như khoảng trắng dấu
  • gây nhầm lẫn cho người bảo trì vì không rõ ràng là không gian EN đang được sử dụng
  • (có lẽ) không thành công ở các địa phương sử dụng dấu chấm làm dấu phân cách dấu chấm (dấu phân cách hàng nghìn) thay vì dấu thập phân

Câu trả lời:


5

Với định dạng số tùy chỉnh sau đây, bạn có thể căn chỉnh số thập phân trong Google Sheets, ngay cả bằng cách sử dụng phông chữ sử dụng k sâu.

Định dạng tùy chỉnh

???.?????

Ảnh chụp màn hình

định dạng số tùy chỉnh
nhập mô tả hình ảnh ở đây

kết quả
nhập mô tả hình ảnh ở đây

Thí dụ

Tôi đã thêm giải pháp này trong một tệp ví dụ: Số thập phân được căn chỉnh


1
Hỗ trợ cho "?" định dạng nhân vật đã vắng mặt khi tôi đặt câu hỏi ban đầu. Tôi tự hỏi liệu nó có được thêm vào như một phần hỗ trợ định dạng số kế toán gần đây của Google không . Đây là một cách giải quyết hữu ích, rất gần với những gì tôi muốn. Hạn chế duy nhất là một dấu thập phân xuất hiện ngay cả khi không có phần phân số. Trong Excel, giới hạn đó có thể được xử lý với định dạng có điều kiện. Nhưng không, có vẻ như, trong Sheets. Tôi chấp nhận câu trả lời này.
MetaEd

4

Tôi đã viết một số mã để làm cho cuộc sống của bạn dễ dàng hơn một chút, trong việc hiển thị các số được căn chỉnh thập phân.

Mã đầu tiên

chỉ có thể được sử dụng trong một phạm vi, vì nó thay đổi linh hoạt sự xuất hiện của các số theo vị trí thập phân cao nhất trong phạm vi. Nó cũng cho phép bạn chọn ký tự dấu, như CHAR (160):

function RANGETRAIL(range,chr){
  chr = chr || '0'; 
  var aValues = new Array(), aDecimals = new Array();

  var max=0;
  for(i in range) {
    if(range[i] != "") {
      var string = range[i].toString();
      aValues.push([string]);
      var aSplit = string.split("."); 

      if(aSplit.length > 1) {
        aDecimals.push([aSplit[1].length]);
        if(aSplit[1].length > max) {
          max = parseInt(aSplit[1].length);        
        } 
      } else {
        aDecimals.push(["-1"]);
      }
    }
  } 

  for(k in aDecimals) {
    if(parseInt(aDecimals[k]) != parseInt(max)) {
      for(var l=parseInt(aDecimals[k]); l<parseInt(max); l++) {        
        aValues[k][0] += chr;
      }
    }
  }     
  return aValues;
}

Mã thứ hai

có nghĩa là được sử dụng cho các tế bào. Ở đây bạn cần đặt độ dài theo sau:

function CELLTRAIL(cell,len,chr){
  // Brad Christie, http://stackoverflow.com/a/5024108/1536038
  chr = chr || '0'; 
  cell = cell.toString();

  if (!len) return cell;

  var p = cell.indexOf('.');
  p = (p!==-1?(cell.length-p-1):-1);

  for (var m = p; m < len; m++) {
    cell += chr;
  }
  return cell;
}

Mã thứ ba

sẽ buộc một chuỗi từ tất cả các số không, ngoại trừ dấu "." và ",":

function RTRIM(cell) {   
  return Number(cell.replace(/[^0-9$.,]/g, ''));
}

Tệp ví dụ

Số thập phân được căn chỉnh nhập mô tả hình ảnh ở đây


Suy nghĩ

Câu trả lời này không loại bỏ các mối quan tâm bạn đã đề cập trong câu hỏi của bạn, nhưng nó sẽ cung cấp một số tự động hóa (động) trong việc hiển thị chúng !! Chúc may mắn.


Tôi muốn chỉ ra rằng điều này có thể dẫn đến các vấn đề căn chỉnh lạ nếu bạn không sử dụng phông chữ có chiều rộng cố định.
Mir

@mir cảm ơn bình luận của bạn Mir. Bạn có thích câu trả lời tôi đưa ra không? Trong những suy nghĩ, tôi đã giải thích rằng nó sẽ không loại bỏ những lo ngại mà OP đưa ra.
Jacob Jan Tuinstra

1
Câu trả lời thực sự rất hữu ích khi tôi nhận ra rằng tôi cần sử dụng phông chữ có chiều rộng cố định. Tôi sẽ thành thật - Tôi đã không đọc kỹ câu hỏi ... Tôi chỉ liếc nhìn nó để xác nhận rằng nó giống với vấn đề của tôi, sau đó nhảy thẳng vào câu trả lời của bạn. Vì vậy, tôi đã không nhận thấy rằng OP bao gồm các mối quan tâm về các phông chữ.
Mir

1

Bạn có thể đặt định dạng một cách có điều kiện bằng cách sử dụng Tập lệnh ứng dụng để lặp lại phạm vi ô và áp dụng các Định dạng số tùy chỉnh khác nhau dựa trên giá trị của ô (số nguyên so với số nguyên). Sử dụng Định dạng số tùy chỉnh, bạn có thể hiển thị các khoảng trắng có độ rộng khác nhau bằng cách sử dụng ký tự gạch dưới, ví dụ, _.chèn khoảng trắng vào chiều rộng của một khoảng thời gian và_0 chèn khoảng trắng vào chiều rộng của dấu chấm chèn khoảng trắng của chiều rộng của ký tự 0. Ngẫu nhiên, hầu hết các phông chữ sử dụng cùng một chiều rộng cho tất cả các ký tự chữ số, vì vậy một ký tự 0 có cùng chiều rộng với 1 và 2 và 3, v.v.

Đây là một ví dụ về cách các số được hiển thị trước và sau khi áp dụng formatd bằng cách chạy tập lệnh. Một nhược điểm là sự thay đổi giá trị của ô từ số nguyên sang số nguyên hoặc ngược lại sẽ yêu cầu định dạng được áp dụng lại để hiển thị hoặc ẩn số thập phân khi cần.

  Raw Numbers  Decimal Aligned
+------------+----------------+
|    1234.777|         1,234.8|
|        5454|         5,454  |
|           7|             7  |
|         0.5|             0.5|
+------------+----------------+

Kịch bản

function decimalAlign() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  var range = sheet.getRange("B2:B5");
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
      var currentCell = range.getCell(i,j);
      var currentValue = currentCell.getValue();
      if (Math.round(currentValue) == currentValue) {
        currentCell.setNumberFormat("#,##0_._0");
      } else {
        currentCell.setNumberFormat("#,##0.0");
      }
    }
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.