Convert Percentage
convert_percentage · numbers · text, number
2026-09-23
กำลังประมวลผล…
convert_percentage · numbers · text, number
2026-09-23
ค่า "15%" เป็นข้อความ และเมื่อแปลงเป็นตัวเลขก็ยังต้องตัดสินใจอีกชั้นว่าจะเก็บเป็น 0.15 เพื่อคำนวณต่อ หรือเก็บเป็น 15 เพื่อแสดงผล เทคนิคนี้แยกสองเรื่องนี้ออกจากกันด้วย asRatio แทนที่จะเดาแทนคุณ
%0.15 — การรันซ้ำจะทำให้ค่าหารร้อยเกินหนึ่งครั้ง% โดยไม่ใช่เปอร์เซ็นต์ เช่น รหัสหรือสูตร% จะถูกส่งกลับตามเดิมโดยไม่แตะ จึงปลอดภัยเมื่อคอลัมน์ปนกันสองแบบ% จะถูกตัดเครื่องหมายแล้วแปลงเป็นตัวเลขasRatio เปิดอยู่เป็นค่าเริ่มต้น ผลลัพธ์จึงหารด้วย 100 — ปิดเมื่ออยากได้ตัวเลขหน้าเดิม| Parameter | Type | Default |
|---|---|---|
columns | string[] | — |
asRatio | boolean | true |
import json
import re
def convert_percentage(value, as_ratio=True):
if not isinstance(value, str) or '%' not in value:
return value
body = value.replace('%', '').replace(',', '').strip()
if not re.fullmatch(r'[+-]?(\d+\.?\d*|\.\d+)', body):
return None
number = float(body)
return number / 100 if as_ratio else number
values = ['15%', '7.5 %', '0.5', None, 12]
result = [convert_percentage(value) for value in values]
print(json.dumps(result, ensure_ascii=False))
คอลัมน์ discount มี 15% ปนกับ 0.2 เพราะมาจากสองระบบ รัน convert_percentage ซึ่งจะแตะเฉพาะค่าที่มี % แล้วดู Preview ว่าค่าที่เหลือยังเป็น 0.2 เหมือนเดิม จากนั้นใช้ convert_type เพื่อทำให้ทั้งคอลัมน์เป็น decimal และตรวจว่าค่าทั้งหมดอยู่ระหว่าง 0 ถึง 1
ใช้ strip_currency สำหรับคอลัมน์เงิน ใช้ round_number เมื่อสัดส่วนมีทศนิยมยาว และใช้ clamp_value เพื่อตรวจว่าค่าหลุดช่วง 0–1 หรือไม่