第一段:在完成雙向稅率與長按設定後,使用者的焦點轉向更高效的商務計算。手動輸入「‑%」折扣、正負號切換以及大額金額前置雙零、三零的過程常因繁瑣與語法錯誤而受阻,影響交易速度與準確性。
第二段:本日推出三項商務特化按鍵——「‑%」折扣一鍵計算、正負號即時反轉(±)以及「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 判斷是否已帶負號,實現無縫的正負號切換。
// 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.jsdiscount) 與 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 並即時回顯最近的記憶值。敬請期待記憶體操作與視覺反饋的結合,為高階計算提供無縫的數據流轉。