🤝 免罵聲明:
- 本文
字符串格式化(上)操作經本蜀黎實戰整理,旨在提供快速參考指南📝- 因各語言版本迭代及不同系統
環境差異,偶爾可能出現整理不全面之處,實屬正常✅- 歡迎理性交流補充,噴子勿噴——畢竟你行你上來寫,我敬你是條漢子,告訴我的你原文鏈接,我給你一鍵三連+轉發👍!
- 若遇具體問題,請帶圖評論區留言,本蜀黎必拔碼相助🤝
⚠️【温馨提示·格式化界的"暗雷區"】
別看這兩篇格式化簡單——實則暗藏深坑,字母符號是記憶難點,用錯地方老闆電療,客户不開心!
💥 符號混淆警告(老闆電療高發區):
- 💢
{:06d}vs{:6d}→ 差個0,科目編碼從「000050」變「 50」,審計署暴怒! - 😱
{:.2f}vs{:2f}→ 差個點,金額從「628.00」變「62800」,財務小姐姐哭暈! - ❌
{:e}vs{:E}→ 差個大小寫,科學計數從「3.14e+12」變「3.14E+12」,國際標準拒收!
🌍 本地化雷區(客户不開心之源):
- 🌈德國用
逗號當小數點→ 88888.67變成88888,67,歐洲客户掀桌! - 🎰土耳其İ詛咒 →
toUpperCase()亂變點,跨國API崩潰!
-🔖 貨幣符號亂入 → ¥(人民幣)、¥(日元)、€(歐元)用錯,海外訂單全黃!
🔢 進制轉換玄學(系統崩潰導火索):
- 💥
二進制0b1100 vs八進制034 vs十六進制0x5A → 輸錯前綴直接系統爆炸! - 💫
parseInt("011101",2)少寫參數 → JS默認當成八進制,庫存數量全亂!
🧘【虎山CTO·格式化急救包】
💊 符號記憶口訣(專治混淆):
- 0是零,d是數,補零要用0撐住 →
{:06d}✅ - 點後f,小數位,沒有點就整崩潰 →
{:.2f}✅ - e科學,E大寫,國際規範要記對 →
{:.2e}vs{:.2E}✅
🌐 本地化避坑口訣(專治客户不開心):
- 💰歐美逗號分千位,德國逗號當小數點 → 永遠顯式指定
Locale.US! - 🧱土耳其İ有點,大寫i要小心 → 用
Locale.ENGLISH鎖死!
⚡ 進制轉換口訣(專治系統爆炸):
- 💎二
bin八oct十六hex,前綴寫錯全報錯 →0b、0、0x別手滑! - 🥨
parseInt要進制,不寫進制八進制→ 永遠顯式寫基數!
📚 系列文章預告:
- 近期內容將聚焦編程基礎構建,以
「原創知識矩陣」形式系統梳理核心概念。每篇如連續劇集般環環相扣,建議按順序學習——知識點一鍋端,療效更持久!🔥
🧾【場景還原·小南的憑證格式化危機】
📉 小南(抓狂地揮舞憑證單):
- 鳴人!審計署要求
金額千分位、日期標準化、科目編碼補零,但供應商傳的JSON全是原始數字😱 - 『628』要顯示為『628.00』,『50』要變成『000050』——雷影老闆説再搞不定就讓我們
手寫全年憑證!📃
🦊 鳴人(結印搓出影分身):
- 「師姐別慌!我這就用
format()結印——等等...Java該怎麼用來着?!」💐
(影分身砰砰消失)「卡卡西老師!雛田!救命啊——」😵
👁️ 卡卡西(雷切劈開亂碼):
- 「嘖,又是格式化問題。
printf如雷切狂暴輸出,String.format如寫輪眼精準控制——雛田,用白眼看看數據結構!」👀
🌸 雛田(柔拳點穴式修復):
🍜鳴人...請、請這樣用:
- Python用
format(),Java用printf,Go用fmt.Sprintf,JS用padStart+toFixed...🎨
還、還有百分號格式化像點穴只動小數點...🎃
⚡ 雷影老闆(電光炸裂):
- 「🌀三小時內不統一格式——你們就去給雲隱村寫一輩子
數字格式化腳本!」
🧘 【扎馬步·格式化心法】
{:06d}→ 補零六位(科目編碼強迫症)🔢{:.2f}→ 小數點兩位(金額優雅西裝)👔{:>8.3f}→ 右對齊8位3小數(報表整齊術)📊{:%}→ 百分號化身(比例可視化)📈padStart(6, '0')→ JS補零術(前端仙法)💎printf("%06d", 50)→ Java咆哮補零(後端剛猛)💥
🧪【四語言實機結印·格式化對比】
1. Python(寫輪眼·一念格式化)
print("{:06d}".format(50)) # 000050
print("{:.2f}".format(628)) # 628.00
print("{:>8.3f}".format(628)) # 628.000
2. Java(柔拳·精準點穴)
System.out.printf("%06d", 50); // 000050
System.out.printf("%.2f", 628.00); // 628.00
System.out.printf("%8.3f", 628.00); // 628.000
3. Go(雷切·暴力格式化)
fmt.Printf("%06d", 50) // 000050
fmt.Printf("%.2f", 628.00) // 628.00
fmt.Printf("%8.3f", 628.00) // 628.000
4. JS(白眼·動態拼接)
console.log(String(50).padStart(6, '0')); // 000050
console.log(628.00.toFixed(2)); // 628.00
console.log(String(628.00.toFixed(3)).padStart(8)); // 628.000
📊【四語言格式化戰力對比表】
| 語言 | 整數補零 | 小數控制 | 對齊操作 | 實戰指數 |
|---|---|---|---|---|
| Python | {:06d} |
{:.2f} |
{:>8} |
⭐⭐⭐⭐⭐ |
| Java | printf("%06d") |
printf("%.2f") |
printf("%8.3f") |
⭐⭐⭐⭐ |
| Go | fmt.Printf("%06d") |
fmt.Printf("%.2f") |
fmt.Printf("%8.3f") |
⭐⭐⭐⭐ |
| JS | padStart(6,'0') |
toFixed(2) |
padStart(8) |
⭐⭐⭐ |
格式化能力解析:
- Python 以 f-string 語法獨佔鰲頭(5星),格式控制最簡潔直觀🥇
- Java/Go 採用傳統
printf風格(4星),類型安全但代碼稍顯冗長🥈- JS 通過字符串方法實現(3星),功能完整但缺乏原生數值格式化支持🥉
核心操作對比:
- 整數補零:統一使用數字+填充格式(如
%06d或padStart)🚀- 小數控制:均支持精度設置(Python/Java/Go 更精確)📌
- 對齊操作:Python 的右對齊
{:>8}與 JS 的padStart各具特色🔁實戰建議:
- 快速開發選 Python🥇
- 企業級系統選 Java/Go🥈
- 前端交互選 JS(需自行封裝複雜格式化邏輯)🥉
⚠️【避坑提示·格式化界的“十八反”】
- 🚫 JS的
toFixed()會四捨五入 → 財務要求截斷時爆雷! - ✅ 用
Math.floor()預處理 → 防金額莫名膨脹💸 - 💥 Java的
printf默認本地化 → 德國用逗號當小數點!
// 危險做法
System.out.printf("%.2f", 628.00); // 在德國輸出 "628,00"
// 安全做法
System.out.printf(Locale.US, "%.2f", 628.00); // 永遠輸出 "628.00"
🌐 Python的format()支持千分位 → 但財務審計可能要求無逗號!
print("{:,.2f}".format(1234567.89)) # 1,234,567.89 → 審計署可能拒收!
🧪【實戰融合術·四語言憑證格式化】
Python(財務科目補零)
account_code = 50
print("{:06d}".format(account_code)) # 000050
Java(金額小數點控制)
double amount = 628.0;
System.out.printf("%.2f", amount); // 628.00
Go(日期右對齊)
date := "2025-01-01"
fmt.Printf("%10s", date) // " 2025-01-01"
JS(百分比可視化)
let ratio = 0.314;
console.log((ratio * 100).toFixed(2) + "%"); // 31.40%
以下是本蜀黎整理源碼和截圖⏬
1.Python源碼⏬
# ==================== 財務格式化模塊 ====================
# 金額千分位格式化 # 給數字穿上西裝打領帶 👔
# 日期標準化輸出 # 時間必須西裝革履 ⏰
# 科目編碼補零 # 財務部的強迫症療法 🧮
# ⚠️ERP_冷溪虎山:格式錯誤會導致報表裸奔
print("{:6d}".format(50))
print("{:06d}".format(50))
print("{:*<6d}".format(50))
print("{:+>6d}".format(50))
print("{:6d}".format(50))
print("{:2d} +{:2d}={:3d}".format(50,8,58))
print("\n以下是浮點數🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔")
print("{:f}".format(628))
print("{:.2f}".format(628))
print("{:.1f}".format(3.14))
print("{:.6f}".format(3.14))
print("{:>8.3f}".format(628)) #保留3位小數,8位浮點數,右對齊
print("{:.2f}-{:.2f}={:.2f}".format(22.2325,10,12.2345))
print("\n以下是百分數🍖🍖🍖🍖🍖🍖🍖🍖🍖🍖🍖")
print("{:%}".format(0.314314))
print("{:.2%}".format(0.314314))
print("{:.6%}".format(0.314314))
print("{:.0%}".format(0.314314))
print("{:8.3%}".format(0.314314)) #保留3位小數,8位百分數,右對齊
print("結束☕☕☕☕☕☕☕☕☕☕☕☕")
2.Nodejs源碼⏬
// ==================== 中藥格式化模塊 ====================
// 藥方劑量標準化 // 君臣佐使排排坐 🧘
// 煎法時間格式化 // 文武火候計時器 ⏳
// 藥材編號補位 // 仙草也要身份證 🪪
// ⚠️虎山老藥師:格式不對影響成丹率
// 整數格式化
console.log(String(50).padStart(6)); // {:6d}
console.log(String(50).padStart(6, '0')); // {:06d}
console.log(String(50).padStart(6, '*')); // {*<6d} (左對齊)
console.log(String(50).padStart(6).replace(/./g, ' ').replace(/ $/, '').padEnd(6, '+')); // {:>+6d} (模擬右對齊)
console.log(String(50).padStart(6)); // {:6d}
console.log(`${String(50).padStart(2)} +${String(8).padStart(2)}=${String(58).padStart(3)}`); // {:2d} +{:2d}={:3d}
console.log("\n以下是浮點數 🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔");
// 浮點數格式化
console.log(628.00.toFixed(0)); // {:f} (無小數)
console.log(628.00.toFixed(2)); // {:.2f}
console.log(3.14.toFixed(1)); // {:.1f}
console.log(3.14.toFixed(6)); // {:.6f}
console.log(String(628.00.toFixed(3)).padStart(8)); // {:>8.3f} (右對齊)
console.log(`${22.2325.toFixed(2)}-${10.00.toFixed(2)}=${12.2345.toFixed(2)}`); // {:.2f}-{:.2f}={:.2f}
console.log("\n以下是百分數 🍖🍖🍖🍖🍖🍖🍖🍖🍖🍖🍖");
// 百分數格式化
console.log((0.314314 * 100).toFixed(0) + "%"); // {:%} (模擬)
console.log((0.314314 * 100).toFixed(2) + "%"); // {:.2%}
console.log((0.314314 * 100).toFixed(6) + "%"); // {:.6%}
console.log(Math.round(0.314314 * 100) + "%"); // {:.0%}
console.log(String((0.314314 * 100).toFixed(3)).padStart(8)); // {:8.3%} (右對齊)
console.log("結束 ☕☕☕☕☕☕☕☕☕☕☕☕");
3.Go源碼⏬
package main
import "fmt"
// ==================== 倉儲格式化模塊 ====================
// 貨號補全至12位 // 強迫症條形碼生成器 🏷️
// 物流單號標準化 // 給快遞發制服 🚛
// 庫存數量對齊 // 讓數字列隊報數 🪖
// ⚠️冷溪物流:格式混亂會導致貨架抑鬱
func main() {
// 整數格式化
fmt.Printf("%6d\n", 50) // {:6d}
fmt.Printf("%06d\n", 50) // {:06d}
fmt.Printf("%-*d\n", 6, 50) // {*<6d} (左對齊)
fmt.Printf("%+6d\n", 50) // {:>6d} (右對齊,但 Go 默認帶符號)
fmt.Printf("%6d\n", 50) // {:6d}
fmt.Printf("%2d +%2d=%3d\n", 50, 8, 58) // {:2d} +{:2d}={:3d}
fmt.Println("\n以下是浮點數🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔")
// 浮點數格式化
fmt.Printf("%f\n", 628) // {:f}
fmt.Printf("%.2f\n", 628) // {:.2f}
fmt.Printf("%.1f\n", 3.14) // {:.1f}
fmt.Printf("%.6f\n", 3.14) // {:.6f}
fmt.Printf("%8.3f\n", 628) // {:>8.3f} (右對齊)
fmt.Printf("%.2f-%.2f=%.2f\n", 22.2325, 10, 12.2345) // {:.2f}-{:.2f}={:.2f}
fmt.Println("\n以下是百分數🍖🍖🍖🍖🍖🍖🍖🍖🍖🍖🍖")
// 百分數格式化
fmt.Printf("%.0f%%\n", 0.314314*100) // {:%} (模擬)
fmt.Printf("%.2f%%\n", 0.314314*100) // {:.2%}
fmt.Printf("%.6f%%\n", 0.314314*100) // {:.6%}
fmt.Printf("%.0f%%\n", 0.314314*100) // {:.0%}
fmt.Printf("%8.3f%%\n", 0.314314*100) // {:8.3%} (右對齊)
fmt.Println("結束☕☕☕☕☕☕☕☕☕☕☕☕")
}
4.Java源碼⏬
// ==================== ERP格式化模塊 ====================
// 單據編號補零 // 系統界的處女座 🌟
// 審批流步驟格式化 // 給流程穿職業裝 👔
// 日誌時間標準化 // 時間戳強迫症患者 ⏱️
// ⚠️ERP老兵_冷溪虎山:格式不規範會觸發系統潔癖
class main16 {
public static void main(String[] args) {
// 整數格式化
System.out.printf("%6d%n", 50); // {:6d}
System.out.printf("%06d%n", 50); // {:06d}
System.out.printf("%-6d%n", 50); // {*<6d} (左對齊,但 Java 沒有直接填充 *)
System.out.printf("%+6d%n", 50); // {:>6d} (右對齊,帶 + 號)
System.out.printf("%6d%n", 50); // {:6d}
System.out.printf("%2d +%2d=%3d%n", 50, 8, 58); // {:2d} +{:2d}={:3d}
System.out.println("\n以下是浮點數🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔🍔");
// 浮點數格式化
System.out.printf("%f%n", 628.00); // {:f}
System.out.printf("%.2f%n", 628.00); // {:.2f}
System.out.printf("%.1f%n", 3.14); // {:.1f}
System.out.printf("%.6f%n", 3.14); // {:.6f}
System.out.printf("%8.3f%n", 628.00); // {:>8.3f} (右對齊)
System.out.printf("%.2f-%.2f=%.2f%n", 22.2325, 10.00, 12.2345); // {:.2f}-{:.2f}={:.2f}
System.out.println("\n以下是百分數🍖🍖🍖🍖🍖🍖🍖🍖🍖🍖🍖");
// 百分數格式化
System.out.printf("%.0f%%%n", 0.314314 * 100); // {:%} (模擬)
System.out.printf("%.2f%%%n", 0.314314 * 100); // {:.2%}
System.out.printf("%.6f%%%n", 0.314314 * 100); // {:.6%}
System.out.printf("%.0f%%%n", 0.314314 * 100); // {:.0%}
System.out.printf("%8.3f%%%n", 0.314314 * 100); // {:8.3%} (右對齊)
System.out.println("結束☕☕☕☕☕☕☕☕☕☕☕☕");
}
}
源碼分享結束⏫
📜【結局:格式統一·老闆驚歎】
⚡ 雷影老闆(看着整齊的報表目瞪口呆):
- 🚀這格式...比我的雷遁還整齊!
- 🍜年終獎加十噸《格式化忍法帖》+
一樂拉麪終身VIP!
🌸 小南(憑證單化作千紙鶴飛散):
- 「🍜鳴人!下次用
{:>8.3f}給所有金額加『貴族間距』——讓審計署再也挑不出刺!」
🦊 鳴人(啃着拉麪嘟囔):
- 「🙏其實...格式化就像煎藥——火候多了糊,少了生,剛剛好才是真忍術!」
🧾【虎山CTO的終極總結】
補零→ 黃芪補氣,填精固表(強系統根基)🌱小數控制→ 甘草調和,百搭兼容(平衡數據陰陽)☯️對齊→ 君臣佐使,各守其位(報表如藥方有序)📜
**編程如用藥,切忌胡亂君臣——
該補零時用黃芪(padStart),該小數時用甘草(toFixed)💊**
⚠️ 免責聲明(附因果律警告)
本代碼已注入中醫玄學能量,請謹慎使用:
-
✅ 允許白嫖,但白嫖不點贊可能導致:
- 下次面試官恰好問到這個算法
- 鍵盤自動打出
//這裏感謝冷溪虎山CTO - 奶茶精準灑在剛寫好的代碼上
-
✅ 允許商用轉發,但商用不註明出處可能觸發:
- 系統類型混亂自動轉型
- 數據庫莫名存儲"君臣佐使"字段
-
✅ 允許吐槽,但吐槽不帶改進建議可能引發:
- 終生與老闆N連鞭相愛相殺
🚀 現在立即行動:
- 點贊 → 吸收本篇算法精華+怪蜀黎腦洞思維
- 收藏 → 避免日後求醫無門
- 關注 → 接收更多「中醫+代碼」腦洞
- 評論區留言 → 領取你的專屬「算法藥方」
⚠️ 友情提示:
- 本文內容過於硬核,建議點贊收藏轉發三連,避免小編
心情波動導致文章神秘消失! - 畢竟小編今天可能愛答不理,明天可能高攀不起——
-
但你的收藏夾,永遠是你最穩的知識備份!
🐶💻 (小聲説:關我小黑屋?不存在的,備份早已同步GitHub/公眾號/網盤!)
📖Python/JS/Go/Java四語言同步學習,跨語言系列上線(別在糾結學什麼單語言了)
🔍 沒看過前傳?快補課!
前1-10篇請移步至"PY-JS-GO-JAVA基礎進階學習系列"合集中閲讀
- Python/JS/Go/Java同步學習(第十五篇)四語言“字符串去重“對照表: 財務“小南“紙式去重術處理憑證內容崩潰(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第十四篇)四語言“字符串字母大小寫轉換“對照表: 財務“小南“紙式轉換術處理憑證內容崩潰(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第十三篇)四語言“字符串轉碼解碼“對照表: 財務“小南“紙式轉碼術處理憑證亂碼崩潰(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第十二篇)四語言“字符串填充編號“對照表: 財務“小南“紙式填充術加憑證編號崩潰(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第十一篇)四語言“字符串替換與填充“對照表: 雷影老闆下達清除“數據歪臉“指令(附源碼/截圖/參數表/避坑指南)