實施人員反映數量小數位保留 3 位不足,需 6 位。回顧 ERP 系統上線以來,數量、金額、成本計算規則反覆修改多次,早期未封裝業務規則、未統一精度標準,導致修改極其繁瑣。深刻體會業務細節對系統運行至關重要,清晰的業務規則與良好架構是保障。
float/double 導致二進制浮點誤差 → 全部改用 decimal。decimal 型別 → 最後用 toFixed() 保留精度。float/double) → 改用 numeric。報表/擁擠介面需去除尾端多餘零。Crystal Reports 方案:
if Right(ToText({命令_4.PartNum}, 6), 6) = "000000" then 0 else
if Right(ToText({命令_4.PartNum}, 6), 5) = "00000" then 1 else
if Right(ToText({命令_4.PartNum}, 6), 4) = "0000" then 2 else
if Right(ToText({命令_4.PartNum}, 6), 3) = "000" then 3 else
if Right(ToText({命令_4.PartNum}, 6), 2) = "00" then 4 else
if Right(ToText({命令_4.PartNum}, 6), 1) = "0" then 5 else 6
設定步驟截圖:


SQL 方案去除尾端零:
SELECT col,
CASE
WHEN CHARINDEX('.', col) = 0 THEN col
WHEN RIGHT(col, PATINDEX('%[^0]%', REVERSE(col))) LIKE '.%'
THEN LEFT(col, LEN(col) - PATINDEX('%[^0]%', REVERSE(col)))
ELSE LEFT(col, LEN(col) - PATINDEX('%[^0]%', REVERSE(col)) + 1)
END AS col_convert
FROM (VALUES ('100'), (NULL), ('.100'), ('.100100'), ('0.'), ('0'), ('100.1010'), ('100.0000')) A(col)
可封裝為函數重用。
double.Parse() 再 ToString(),但連續 5 位零會變科學記號 → 先 double.Parse() 轉字串再轉 decimal 可去除多餘零。