Help us shape the future of Go! Take the 2026 Go Developer Survey

moneyx

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2026 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Overview

Package moneyx 提供无状态、仅依赖标准库的元字符串与 int64 分金额转换,支持正数、负数和零。

YuanToCent 接受 ASCII 十进制整数或一至两位小数,允许一个前导负号及前导零; 例如 "12"、"12.3"、"-00012.34" 分别转换为 1200、1230、-1234 分。 拒绝空白、正号、科学计数法、千位分隔符、全角数字及多余小数位,不自动清理或舍入。 元金额范围为 "-92233720368547758.08" 至 "92233720368547758.07",对应 int64 的完整范围。 "-0"、"-0.00" 等负零输入均转换为 0;CentToYuan 将零输出为 "0.00"。 CentToYuan 始终输出固定两位小数;任意 int64 分金额往返转换不损失精度。

去除可选的前导负号后,错误依次按以下顺序判断,失败时分金额返回 0:

  • ErrInvalidFormat:整数部分为空,或存在小数点但其后部分为空、超过两个字节。
  • ErrInvalidCharacter:结构与长度检查通过后,整数或小数部分含非 ASCII 数字。
  • ErrOverflow:格式合法,但转换后的分金额超出 int64 范围。

调用方通过 errors.Is 判断错误并映射业务提示,不依赖错误文本。 本包不管理币种、汇率或业务金额上下限;是否允许负数、零金额等规则由应用判断。

以下示例需导入 fmt 和 github.com/bpcoder16/pixiu/moneyx:

cent, err := moneyx.YuanToCent("-12.30")
if err != nil {
    return err
}
fmt.Println(cent)                   // -1230
fmt.Println(moneyx.CentToYuan(cent)) // -12.30

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	// ErrInvalidFormat 表示去除可选负号后整数部分为空,或小数点后的部分不满足一至两个字节的长度要求。
	ErrInvalidFormat = errors.New("moneyx: invalid amount format")
	// ErrInvalidCharacter 表示结构检查通过后,整数或小数部分包含非 ASCII 数字字符。
	ErrInvalidCharacter = errors.New("moneyx: invalid amount character")
	// ErrOverflow 表示转换后的分金额超出 int64 范围。
	ErrOverflow = errors.New("moneyx: amount overflows int64 cents")
)

Functions

func CentToYuan

func CentToYuan(value int64) string

CentToYuan 将 int64 分金额转换为元字符串,固定保留两位小数,不损失精度,零输出为 "0.00"。

Example
package main

import (
	"fmt"

	"github.com/bpcoder16/pixiu/moneyx"
)

func main() {
	fmt.Println(moneyx.CentToYuan(1230))
	fmt.Println(moneyx.CentToYuan(1))
	fmt.Println(moneyx.CentToYuan(-1))
}
Output:
12.30
0.01
-0.01

func YuanToCent

func YuanToCent(value string) (int64, error)

YuanToCent 将元金额转换为 int64 分金额,接受整数或一至两位小数,允许前导负号和前导零。 不清理空白、不接受正号或科学计数法、不舍入;负零转换为 0,失败返回 0 和可用 errors.Is 判断的错误。 去除可选负号后,依次检查结构与小数部分长度、ASCII 数字字符、分金额范围。

Example
package main

import (
	"errors"
	"fmt"

	"github.com/bpcoder16/pixiu/moneyx"
)

func main() {
	cent, err := moneyx.YuanToCent("-12.30")
	fmt.Println(cent, err)

	_, err = moneyx.YuanToCent("92233720368547758.08")
	fmt.Println(errors.Is(err, moneyx.ErrOverflow))
}
Output:
-1230 <nil>
true

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL