fix: 金额计算展示保留原始数据精度,去除 toFixed(1) 进位截断并升级至 v1.0.3
Build Android APK / Build Release APK (push) Canceled after 0s
Sync Release Notes / update-releases (push) Canceled after 0s

This commit is contained in:
OpenClaw Agent
2026-09-16 03:04:10 +08:00
parent a8ece73038
commit 9efd9a3099
7 changed files with 80 additions and 54 deletions
+16 -10
View File
@@ -287,26 +287,32 @@
}
// ===== 格式化 =====
function fmt(n) { return (Number(n) || 0).toFixed(1); }
function money(n) { return '¥' + (Number(n) || 0).toFixed(1); }
function signed(n) {
// 消除浮点二进制抖动,同时保留原始数据(不进行有损进位截断)
function rawAmount(n) {
var v = Number(n) || 0;
return (v >= 0 ? '+¥' : '-¥') + Math.abs(v).toFixed(1);
return Math.round((v + Number.EPSILON) * 100) / 100;
}
function fmt(n) { return (Number(n) || 0).toFixed(1); }
function money(n) { return '¥' + rawAmount(n); }
function signed(n) {
var v = rawAmount(n);
return (v >= 0 ? '+¥' : '-¥') + Math.abs(v);
}
/**
* 金额拆成 符号/整数部/小数部,供看板主数字分层渲染(大字只放整数部)。
* 必须从 toFixed(1) 的结果上切,不能用 Math.floor 另算,
* 否则 99.96 会被 money() 进为 100.0、而拆分出 99.0,两处数字对不上。
* 保留原始数据的小数部分,不进行有损四舍五入。
*/
function moneyParts(n) {
var v = Number(n) || 0;
var s = Math.abs(v).toFixed(1);
var v = rawAmount(n);
var s = String(Math.abs(v));
var dot = s.indexOf('.');
var intPart = dot !== -1 ? s.slice(0, dot) : s;
var fracPart = dot !== -1 ? s.slice(dot) : '';
return {
sign: v < 0 ? '-' : '',
int: s.slice(0, dot).replace(/\B(?=(\d{3})+(?!\d))/g, ','), // 千分位
frac: s.slice(dot)
int: intPart.replace(/\B(?=(\d{3})+(?!\d))/g, ','), // 千分位
frac: fracPart
};
}