Bagaimana cara meratakan angka desimal di Google Sheets

13

Di Google Sheets, saya ingin meluruskan angka desimal tanpa menambahkan angka nol di bagian pecahan.

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

Format kolom pertama mudah dilakukan (misalnya, menggunakan format "0,0" atau hanya mengatur titik desimal khusus di bawah tombol 123).

Di Excel, saya percaya format kolom kedua dilakukan dengan menggunakan format "0.?", Tetapi pada saat penulisan ini tidak berfungsi di Google Sheets.

Penanganan masalah

Dimungkinkan untuk membuntuti karakter dengan Pengganti:

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

Catatan: dua karakter spasi putih tersubstitusi bukan U + 0020 SPACE tetapi U + 2002 EN SPACE . ( U + 00A0 NO-BREAK SPACE juga berfungsi.)

Beberapa efek samping yang tidak diinginkan dari solusi ini adalah itu

  • memodifikasi tidak hanya format tampilan tetapi juga nilai sel
  • membutuhkan penggunaan font monospace di dalam sel
  • trailing whitespace menyebabkan penggantian font karena Unicode dan tidak mencetak dengan benar
  • trailing underline tidak diinginkan seperti trailing whitespace
  • membingungkan pengelola karena tidak terbukti bahwa EN SPACE sedang digunakan
  • (mungkin) gagal di lokal yang menggunakan periode sebagai pemisah periode (ribuan pemisah) alih-alih penanda desimal
MetaEd
sumber

Jawaban:

5

Dengan format angka khusus berikut, Anda dapat menyelaraskan angka desimal di Google Sheets, bahkan dengan menggunakan font yang menggunakan kerning.

Format khusus

???.?????

Tangkapan layar

format angka khusus
masukkan deskripsi gambar di sini

hasil
masukkan deskripsi gambar di sini

Contoh

Saya telah menambahkan solusi ini dalam file contoh: Angka Desimal-Blok

Jacob Jan Tuinstra
sumber
1
Dukungan untuk "?" format karakter tidak ada ketika saya awalnya mengajukan pertanyaan. Saya ingin tahu apakah itu ditambahkan sebagai bagian dari dukungan Google baru-baru ini terhadap format angka akuntansi . Ini adalah solusi yang berguna, sangat dekat dengan yang saya inginkan. Satu-satunya batasan adalah bahwa titik desimal muncul bahkan ketika tidak ada bagian fraksional. Di Excel, batasan itu bisa diselesaikan dengan pemformatan bersyarat. Tapi sepertinya tidak di Sheets. Saya menerima jawaban ini.
MetaEd
4

Saya menulis beberapa kode untuk membuat hidup Anda sedikit lebih mudah, dalam menampilkan angka-angka yang disejajarkan dengan desimal.

Kode pertama

hanya dapat digunakan dalam rentang, karena secara dinamis mengubah tampilan angka sesuai dengan tempat desimal tertinggi dalam rentang. Anda juga dapat memilih karakter yang mengekor, seperti 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;
}

Kode kedua

dimaksudkan untuk digunakan untuk sel. Di sini Anda perlu mengatur panjang trailing:

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;
}

Kode ketiga

akan mengikat string dari semua non-numerik, kecuali "." dan ",":

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

Contoh File

Angka Desimal-Blok masukkan deskripsi gambar di sini


Pikiran

Jawaban ini tidak menghilangkan kekhawatiran yang Anda sebutkan dalam pertanyaan Anda, tetapi itu akan memberikan beberapa otomatisasi (secara dinamis) dalam menampilkannya !! Semoga berhasil.

Jacob Jan Tuinstra
sumber
Saya ingin menunjukkan bahwa ini dapat menyebabkan masalah pelurusan aneh jika Anda tidak menggunakan font dengan lebar tetap.
Mir
@mir, terima kasih atas komentar Anda, Mir. Apakah Anda menyukai jawaban yang saya berikan? Dalam pikiran saya menjelaskan bahwa itu tidak akan menghilangkan kekhawatiran OP.
Jacob Jan Tuinstra
1
Jawabannya sebenarnya sangat membantu sekali saya menyadari bahwa saya perlu menggunakan font dengan lebar tetap. Saya akan jujur ​​- saya tidak membaca pertanyaan dengan hati-hati ... Saya hanya meliriknya untuk mengkonfirmasi bahwa itu mirip dengan masalah saya, kemudian langsung melompat ke jawaban Anda. Jadi saya tidak melihat bahwa OP menyertakan kekhawatiran tentang font.
Mir
1

Anda dapat mengatur format secara kondisional dengan menggunakan Script Aplikasi untuk beralih pada rentang sel dan menerapkan Format Nomor Kustom berbeda berdasarkan nilai sel (integer vs non-integer). Menggunakan Format Angka Kustom, Anda dapat menampilkan spasi putih dengan lebar bervariasi menggunakan karakter garis bawah, misalnya, _.menyisipkan spasi putih lebar periode dan _0menyisipkan spasi putih lebar karakter nol. Secara kebetulan, sebagian besar font menggunakan lebar yang sama untuk semua karakter angka sehingga 0 karakter sama lebar dengan 1 dan 2 dan 3 dll.

Ini adalah contoh bagaimana angka-angka ditampilkan sebelum dan sesudah menerapkan formatd dengan menjalankan skrip. Salah satu kelemahannya adalah bahwa perubahan nilai sel dari integer ke non-integer atau sebaliknya akan membutuhkan pemformatan untuk diterapkan kembali untuk menunjukkan atau menyembunyikan desimal sesuai kebutuhan.

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

Naskah

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");
      }
    }
  }
}
Collin Anderson
sumber