ฉันจะจัดตำแหน่งตัวเลขทศนิยมใน Google ชีตได้อย่างไร


13

ใน Google ชีตฉันต้องการจัดตำแหน่งตัวเลขทศนิยมโดยไม่ต้องเพิ่มเลขศูนย์ต่อท้ายในส่วนที่เป็นเศษส่วน

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

รูปแบบของคอลัมน์แรกสามารถทำได้อย่างง่ายดาย (ตัวอย่างเช่นการใช้รูปแบบ "0.0" หรือเพียงแค่ตั้งค่าจุดทศนิยมแบบกำหนดเองภายใต้ปุ่ม 123)

ใน Excel ฉันเชื่อว่ารูปแบบของคอลัมน์ที่สองนั้นสามารถทำได้โดยใช้รูปแบบ "0. ?" แต่เนื่องจากการเขียนนี้มันไม่สามารถใช้งานได้ใน Google ชีต

วิธีแก้ปัญหา

มีความเป็นไปได้ที่จะบังคับให้ตัวอักขระต่อท้ายด้วยการแทนที่:

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

หมายเหตุ: ตัวละครทั้งสองช่องว่างแทนไม่ได้U + 0020 SPACEแต่U + 2002 EN SPACE ( U + 00A0 NO-BREAK SPACE ใช้งานได้เช่นกัน)

ผลข้างเคียงที่ไม่พึงประสงค์บางประการของวิธีแก้ปัญหานี้ก็คือ

  • ปรับเปลี่ยนไม่เพียง แต่รูปแบบการแสดงผล แต่ยังรวมถึงค่าของเซลล์
  • ต้องการการใช้แบบอักษร monospaced ในเซลล์
  • ช่องว่างต่อท้ายทำให้เกิดการทดแทนแบบอักษรเนื่องจาก Unicode และพิมพ์ไม่ถูกต้อง
  • ขีดเส้นใต้ส่วนท้ายไม่เป็นที่ต้องการเช่นเดียวกับช่องว่างต่อท้าย
  • ทำให้ผู้ดูแลระบบสับสนเพราะไม่เห็นว่ามีการใช้ EN SPACE
  • (สมมุติ) ล้มเหลวในโลแคลที่ใช้จุดเป็นตัวคั่นจุด (ตัวคั่นหลักพัน) แทนเครื่องหมายทศนิยม

คำตอบ:


5

ด้วยรูปแบบตัวเลขที่กำหนดเองดังต่อไปนี้คุณสามารถจัดตำแหน่งตัวเลขทศนิยมใน Google ชีตได้แม้จะใช้แบบอักษรที่ใช้การจัดช่องไฟ

รูปแบบที่กำหนดเอง

???.?????

ภาพหน้าจอ

รูปแบบตัวเลขที่กำหนดเอง
ป้อนคำอธิบายรูปภาพที่นี่

ผลลัพธ์
ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่าง

ฉันได้เพิ่มวิธีแก้ปัญหานี้ในไฟล์ตัวอย่าง: ตัวเลขทศนิยมชิดขอบ


1
รองรับ "?" รูปแบบอักขระขาดหายไปเมื่อฉันถามคำถามครั้งแรก ผมสงสัยว่ามันถูกเพิ่มเข้ามาเป็นส่วนหนึ่งของการสนับสนุนที่ผ่านมาของ Google บัญชีรูปแบบตัวเลข นี่เป็นวิธีแก้ปัญหาที่มีประโยชน์ใกล้กับสิ่งที่ฉันต้องการ ข้อ จำกัด เพียงอย่างเดียวคือจุดทศนิยมจะปรากฏขึ้นแม้ว่าจะไม่มีส่วนที่เป็นเศษส่วนก็ตาม ใน Excel ข้อ จำกัด นั้นสามารถแก้ไขได้ด้วยการจัดรูปแบบตามเงื่อนไข แต่ไม่ดูเหมือนในแผ่นงาน ฉันยอมรับคำตอบนี้
MetaEd

4

ฉันเขียนโค้ดเพื่อทำให้ชีวิตของคุณง่ายขึ้นเล็กน้อยในการแสดงตัวเลขที่มีจุดทศนิยม

รหัสแรก

สามารถใช้ได้ในช่วงเท่านั้นเนื่องจากจะเปลี่ยนลักษณะที่ปรากฏของตัวเลขตามตำแหน่งทศนิยมสูงสุดในช่วงแบบไดนามิก นอกจากนี้ยังช่วยให้คุณเลือกตัวละครต่อท้ายเช่น 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;
}

รหัสที่สอง

มีวัตถุประสงค์เพื่อใช้สำหรับเซลล์ ที่นี่คุณต้องตั้งค่าความยาวต่อท้าย:

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

รหัสที่สาม

จะรัดสายจากที่ไม่ใช่ตัวเลขทั้งหมดยกเว้น "." และ ",":

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

ไฟล์ตัวอย่าง

ตัวเลขที่จัดตำแหน่งทศนิยม ป้อนคำอธิบายรูปภาพที่นี่


ความคิด

คำตอบนี้ไม่ได้นำความกังวลที่คุณกล่าวถึงในคำถามของคุณไปใช้ โชคดี.


ฉันต้องการชี้ให้เห็นว่าสิ่งนี้สามารถนำไปสู่ปัญหาการจัดตำแหน่งที่แปลกถ้าคุณไม่ได้ใช้แบบอักษรความกว้างคงที่
เมียร์

@mir ขอบคุณสำหรับความคิดเห็นของคุณมีร์ คุณชอบคำตอบที่ฉันให้หรือไม่ ในหัวความคิดฉันอธิบายว่ามันจะไม่เอาความกังวลที่ OP ให้ไป
Jacob Jan Tuinstra

1
คำตอบนั้นมีประโยชน์จริง ๆ เมื่อฉันรู้ว่าฉันต้องใช้แบบอักษรที่มีความกว้างคงที่ ฉันจะซื่อสัตย์ - ฉันไม่ได้อ่านคำถามอย่างระมัดระวัง ... ฉันแค่มองมันเพื่อยืนยันว่ามันคล้ายกับปัญหาของฉันจากนั้นก็กระโดดไปที่คำตอบของคุณ ดังนั้นฉันจึงไม่ได้สังเกตว่า OP ได้รวมข้อกังวลเกี่ยวกับแบบอักษร
เมียร์

1

คุณสามารถตั้งค่ารูปแบบตามเงื่อนไขโดยใช้แอพสคริปต์เพื่อทำซ้ำในช่วงของเซลล์และใช้รูปแบบตัวเลขที่กำหนดเองที่แตกต่างกันตามมูลค่าของเซลล์ (จำนวนเต็มเทียบกับไม่ใช่จำนวนเต็ม) การใช้รูปแบบตัวเลขแบบกำหนดเองคุณสามารถแสดงช่องว่างสีขาวที่มีความกว้างต่างกันโดยใช้อักขระขีดล่างเช่น_.แทรกช่องว่างสีขาวความกว้างของจุดและ_0แทรกช่องว่างความกว้างของอักขระศูนย์ แบบอักษรส่วนใหญ่ใช้ความกว้างเท่ากันสำหรับอักขระตัวเลขทั้งหมดดังนั้นอักขระ 0 คือความกว้างเดียวกันกับ 1 และ 2 และ 3 เป็นต้น

นี่คือตัวอย่างของการแสดงตัวเลขก่อนและหลังการใช้รูปแบบโดยการเรียกใช้สคริปต์ ข้อเสียเปรียบประการหนึ่งคือการเปลี่ยนแปลงค่าของเซลล์จากจำนวนเต็มเป็นไม่ใช่จำนวนเต็มหรือในทางกลับกันจะต้องใช้การจัดรูปแบบอีกครั้งเพื่อแสดงหรือซ่อนทศนิยมตามต้องการ

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

ต้นฉบับ

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");
      }
    }
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.