Come faccio ad allineare i numeri decimali in Fogli Google


13

In Fogli Google, voglio allineare i numeri decimali senza aggiungere zeri finali nella parte frazionaria.

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

Il formato della prima colonna è facilmente realizzabile (ad esempio, utilizzando il formato "0.0" o semplicemente impostando i punti decimali personalizzati sotto il pulsante 123).

In Excel, credo che il formato della seconda colonna sia realizzato utilizzando il formato "0.?", Ma al momento della stesura di questo documento non funziona in Fogli Google.

Soluzione

È possibile forzare i personaggi finali con Substitute:

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

Nota: i due caratteri di spazi bianchi sostituiti non sono U + 0020 SPACE ma U + 2002 EN SPACE . ( Funziona anche U + 00A0 NO-BREAK SPACE .)

Alcuni effetti collaterali indesiderati di questa soluzione alternativa sono che

  • modifica non solo il formato di visualizzazione ma anche il valore della cella
  • richiede l'uso di un carattere a spaziatura fissa nella cella
  • lo spazio bianco finale causa la sostituzione del carattere a causa di Unicode e non viene stampato correttamente
  • le sottolineature finali non sono desiderabili come gli spazi vuoti finali
  • confonde i manutentori perché non è evidente che venga utilizzato un EN SPACE
  • (presumibilmente) fallisce in locali che usano il punto come separatore del periodo (separatore delle migliaia) invece del marcatore decimale

Risposte:


5

Con il seguente formato numerico personalizzato, puoi allineare i numeri decimali in Fogli Google, anche utilizzando i caratteri che utilizzano la crenatura.

Formato personalizzato

???.?????

Immagine dello schermo

formato numerico personalizzato
inserisci qui la descrizione dell'immagine

risultato
inserisci qui la descrizione dell'immagine

Esempio

Ho aggiunto questa soluzione in un file di esempio: numeri allineati decimali


1
Supporto per il "?" il carattere del formato era assente quando inizialmente avevo posto la domanda. Mi chiedo se sia stato aggiunto come parte del recente supporto di Google ai formati dei numeri contabili . Questa è una soluzione utile, molto vicino a ciò che voglio. L'unica limitazione è che appare un punto decimale anche quando non c'è parte frazionaria. In Excel, tale limitazione può essere aggirata con la formattazione condizionale. Ma non, sembra, in Fogli. Accetto questa risposta.
MetaEd

4

Ho scritto un po 'di codice per rendere il tuo live un po' più semplice, visualizzando numeri allineati in decimali.

Il primo codice

può essere utilizzato solo in un intervallo, poiché modifica dinamicamente l'aspetto dei numeri in base al decimale più alto dell'intervallo. Ti permette anche di scegliere il personaggio finale, come 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;
}

Il secondo codice

è pensato per essere usato per le cellule. Qui è necessario impostare la lunghezza finale:

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

Il terzo codice

legherà una stringa da tutte le non numeriche, tranne un "." e ",":

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

File di esempio

Numeri decimali inserisci qui la descrizione dell'immagine


Pensieri

Questa risposta non toglie le preoccupazioni che hai citato nella tua domanda, ma darà un po 'di automazione (dinamicamente) alla loro visualizzazione !! In bocca al lupo.


Vorrei sottolineare che questo può portare a strani problemi di allineamento se non si utilizza un carattere a larghezza fissa.
Mir,

@mir grazie per il tuo commento Mir. Ti è piaciuta la risposta che ho dato? Nella rubrica dei pensieri ho spiegato che non avrebbe eliminato le preoccupazioni espresse dall'OP.
Jacob Jan Tuinstra,

1
La risposta è stata davvero utile una volta capito che avevo bisogno di usare un carattere a larghezza fissa. Sarò onesto - non ho letto attentamente la domanda ... Ho appena guardato per confermare che era simile al mio problema, quindi sono saltato direttamente alla tua risposta. Quindi non ho notato che OP includeva preoccupazioni riguardo ai caratteri.
Mir,

1

Puoi impostare il formato in modo condizionale utilizzando uno script di app per scorrere nell'intervallo di celle e applicare diversi formati di numeri personalizzati in base al valore della cella (intero contro non intero). Utilizzando i formati numerici personalizzati, è possibile visualizzare spazi bianchi di larghezza variabile utilizzando il carattere di sottolineatura, ad esempio _.inserendo spazi bianchi la larghezza di un punto e _0inserendo spazi bianchi la larghezza di un carattere zero. Per inciso, la maggior parte dei caratteri usa la stessa larghezza per tutti i caratteri numerici, quindi uno 0 ha la stessa larghezza di 1, 2 e 3 ecc.

Questo è un esempio di come vengono visualizzati i numeri prima e dopo aver applicato il formatd eseguendo lo script. Uno svantaggio è che una modifica del valore della cella da intero a non intero o viceversa richiederà la riapplicazione della formattazione per mostrare o nascondere il decimale secondo necessità.

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

copione

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");
      }
    }
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.