first commit

This commit is contained in:
2026-09-21 17:37:53 +08:00
commit 67d4dd5b7c
141 changed files with 8558 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
/// 金额展示与计算工具
///
/// 统一入口的意义:后端返回 double,可能出现 null / NaN / Infinity,
/// 直接 toStringAsFixed 会抛异常或显示 "NaN",所以全部走这里兜底。
library;
/// 金额展示:固定两位小数,非法值回退 '0.00'
String formatAmount(double? value) {
if (value == null || !value.isFinite) return '0.00';
return value.toStringAsFixed(2);
}
/// 带符号金额:支出 '-¥12.00',收入 '+¥12.00'
///
/// 是否支出必须由调用方显式传入(用 bill.type 判断),
/// 不要用金额正负判断——后端返回的 amount 恒为正数。
String formatSignedAmount(double? amount, {required bool isExpense}) {
final text = formatAmount(amount?.abs());
return isExpense ? '-¥$text' : '+¥$text';
}
/// 占比(0~100)。分母 <= 0 或非法时返回 0,避免除零与 NaN
double percentOf(double part, double total) {
if (!part.isFinite || !total.isFinite || total <= 0) return 0;
final pct = part / total * 100;
return pct.clamp(0, 100);
}