77 lines
2.0 KiB
TypeScript
77 lines
2.0 KiB
TypeScript
/**
|
|
* 统一金额处理工具函数
|
|
* 后端存储:int64(分)
|
|
* 前端展示:角精度(0.1元)
|
|
*/
|
|
|
|
/**
|
|
* 将金额四舍五入到角精度(0.1元)
|
|
* @example roundMoney(12.34) -> 12.3
|
|
* @example roundMoney(12.36) -> 12.4
|
|
*/
|
|
export function roundMoney(value: number): number {
|
|
return Math.round(Number(value || 0) * 10) / 10
|
|
}
|
|
|
|
/**
|
|
* 格式化金额为字符串(保留1位小数)
|
|
* @example formatMoney(12.3) -> "12.3"
|
|
* @example formatMoney(12.0) -> "12.0"
|
|
*/
|
|
export function formatMoney(value: number | undefined | null): string {
|
|
const num = Number(value || 0)
|
|
return roundMoney(num).toFixed(1)
|
|
}
|
|
|
|
/**
|
|
* 格式化金额并添加货币符号
|
|
* @example formatMoneyWithSymbol(12.3) -> "¥12.3"
|
|
*/
|
|
export function formatMoneyWithSymbol(value: number | undefined | null): string {
|
|
return `¥${formatMoney(value)}`
|
|
}
|
|
|
|
/**
|
|
* 分转元(保留2位小数)
|
|
* @example centToYuan(12345) -> 123.45
|
|
*/
|
|
export function centToYuan(cent: number | undefined | null): number {
|
|
return Number(cent || 0) / 100
|
|
}
|
|
|
|
/**
|
|
* 分转展示用元(四舍五入到0.1元)
|
|
* @example centToDisplayYuan(12345) -> 123.5
|
|
* @example centToDisplayYuan(12344) -> 123.4
|
|
*/
|
|
export function centToDisplayYuan(cent: number | undefined | null): number {
|
|
return roundMoney(centToYuan(cent))
|
|
}
|
|
|
|
/**
|
|
* 格式化分为角字符串(保留1位小数)
|
|
* @example formatCent(12345) -> "123.5"
|
|
* @example formatCent(12344) -> "123.4"
|
|
*/
|
|
export function formatCent(cent: number | undefined | null): string {
|
|
return centToDisplayYuan(cent).toFixed(1)
|
|
}
|
|
|
|
/**
|
|
* 格式化分为角字符串并添加货币符号
|
|
* @example formatCentWithSymbol(12345) -> "¥123.5"
|
|
*/
|
|
export function formatCentWithSymbol(cent: number | undefined | null): string {
|
|
return `¥${formatCent(cent)}`
|
|
}
|
|
|
|
/**
|
|
* 元转分(四舍五入)
|
|
* 用户输入金额时使用
|
|
* @example yuanToCent(123.45) -> 12345
|
|
* @example yuanToCent(123.456) -> 12346
|
|
*/
|
|
export function yuanToCent(yuan: number | undefined | null): number {
|
|
return Math.round(Number(yuan || 0) * 100)
|
|
}
|