iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
Build on Google AI

液態玻璃美學:結合 Gemini 與 Antigravity IDE,打造 120FPS、多視窗比例與網格順延推擠佈局的強大商務運算終端系列 第 12

Day 12:【高階商務計算機】商務折扣 (-%)、正負號即時反轉 (±) 與雙零/三零快速輸入

  • 分享至 

  • xImage
  •  

第一段:在完成雙向稅率與長按設定後,使用者的焦點轉向更高效的商務計算。手動輸入「‑%」折扣、正負號切換以及大額金額前置雙零、三零的過程常因繁瑣與語法錯誤而受阻,影響交易速度與準確性。

第二段:本日推出三項商務特化按鍵——「‑%」折扣一鍵計算、正負號即時反轉(±)以及「00」與「000」快速輸入。透過狀態機與語法保護,我們在鍵盤上實現了單鍵完成複雜輸入的能力,讓商務操作變得流暢且安全。


專案正式上線體驗與開源倉庫

線上體驗 Live Demo:https://410355-collab.github.io/Premium-Business-Calculator/
(強烈建議使用 iPhone Safari 或 Android 手機開啟體驗!)
GitHub 開源倉庫:https://github.com/410355-collab/Premium-Business-Calculator
歡迎提出建議與指導
(開發環境:Google Antgravity IDE + Google Gemini 協同開發)


一、技術痛點

手動輸入折扣與正負號的低效與易錯

使用者在交易時往往需要一次性套用百分比折扣或切換正負號,若依賴連續按鍵會導致錯誤的括號或多餘的運算符,最終觸發「SYNTAX ERROR」。

大額金額前置零的繁瑣

在商務報價或稅務報表中,常需在金額前快速輸入「00」或「000」以符合格式要求。傳統數字鍵無法一次完成,需多次敲擊並手動調整千位分隔符,降低效率。

二、解決方案

「‑%」折扣一鍵計算

// script.js – 折扣鍵定義
'discount': {
  label: '-%',
  action: 'applyDiscount',
  type: 'cyan',
  category: 'biz',
  name: '-%'
},
// 折扣計算核心
function applyDiscount() {
  const expr = getCurrentExpression();
  if (!/\\d+$/.test(expr)) {
    toast('只能在數字後使用折扣');
    return;
  }
  const rate = promptUser('輸入折扣 %', 5); // 預設 5%
  const newExpr = expr.replace(/(\\d+)(?!.*\\d)/, num => `(${num}*${100 - rate})/100`);
  setCurrentExpression(newExpr);
  toast(`${rate}% 折扣已套用`);
}

語法保護

正則 /\\d+$/ 確保折扣只會附加在最後的純數字上,避免在已有運算子或函式名稱後出錯。

正負號即時反轉(±)

// script.js – 正負號鍵定義
'plus_minus': {
  icon: 'plus_minus',
  action: 'toggleSign',
  type: 'cyan',
  category: 'biz',
  name: '±'
},
// 正負號切換核心
function toggleSign() {
  const cursor = getCursorPosition();
  const token = getTokenAt(cursor);
  if (!/^\\d/.test(token)) {
    toast('請選取數字後再切換正負號');
    return;
  }
  const signed = token.startsWith('-') ? token.slice(1) : `-${token}`;
  replaceTokenAt(cursor, signed);
}

狀態機

toggleSign 會根據光標所在的 token 判斷是否已帶負號,實現無縫的正負號切換。

雙零與三零快速輸入(00 / 000)

// script.js – 雙零鍵
'double_zero': {
  label: '00',
  action: 'inputNum',
  param: '00',
  type: '',
  category: 'biz',
  name: '00'
},
// script.js – 三零鍵
'triple_zero': {
  label: '000',
  action: 'inputNum',
  param: '000',
  type: 'small-text',
  category: 'biz',
  name: '000'
},
// 快速輸入核心
function inputNum(param) {
  const cursor = getCursorPosition();
  const prev = getCharAt(cursor - 1);
  // 防止在已有數字後直接拼接形成非法長數字
  if (/\\d/.test(prev)) {
    insertAt(cursor, `,${param}`);
  } else {
    insertAt(cursor, param);
  }
}

語法保護機制

在前一字符為數字時自動插入千位分隔符 ,,確保長數字仍保持可讀性且不違反算式規則。

三、核心代碼精華:script.js

  • 折扣鍵 (discount) 與 applyDiscount
  • 正負號鍵 (plus_minus) 與 toggleSign
  • 雙零 (double_zero) 與三零 (triple_zero) 鍵與 inputNum
  • quickCandidates 陣列已加入上述三鍵以支援快速鍵盤候選

四、深度調校剖析

折扣正則的安全性

applyDiscount 僅在表達式最後的純數字後生效,若匹配失敗即時以 toast 提示用戶,避免誤觸其他運算子。

正負號切換的光標感知

getTokenAt 透過雙向掃描取得完整數字 token,支援小數點與千分位,切換後光標保持不變,使用者可直接繼續輸入。

雙零、三零的逗號插入策略

inputNum 在前一字符為數字時自動加入 ,,防止形成如 1234500 的難讀長數字,同時保持算式合法。

五、總結

本日完成了商務折扣、一鍵正負號切換以及雙零/三零快速輸入的全套實作。透過狀態機與語法保護,這三項功能在單鍵操作下即可安全完成複雜的商務計算,顯著提升了交易效率與使用者體驗。

明日預告:高階記憶體系統與螢幕呼吸指示燈

在 Day 13,我們將引入完整的記憶體暫存陣列(MC、MR、M+、M‑、MS),並在螢幕左上角新增發光 [M] 記憶體指示燈。當記憶值不為 0 時,指示燈將呈現柔和的呼吸光暈,點擊即可喚醒 MR 並即時回顯最近的記憶值。敬請期待記憶體操作與視覺反饋的結合,為高階計算提供無縫的數據流轉。


上一篇
Day  11:【高階商務計算機】雙向稅率核心與長按 Casio SET 模式
下一篇
Day 13:【高階商務計算機】跨步驟計算不再靠死記!五鍵記憶體系統與螢幕發光 [M] 指示燈
系列文
液態玻璃美學:結合 Gemini 與 Antigravity IDE,打造 120FPS、多視窗比例與網格順延推擠佈局的強大商務運算終端15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言