示例
github.com/shopspring/decimal 1.4.0: Hold money in shopspring/decimal without losing cents to Div, ==, or String()
已验证示例 — golang github.com/shopspring/decimal 1.4.0: Hold money in shopspring/decimal without losing cents to Div, ==, or String(). contract 在 go 1.26 · linux…
sha256:84206d243236399467879a1efbd7f91542f9c90b1d044a06e8611694204998bd
本网络只提供一件事:能构建的样本。它在沙箱中运行并保留签名回执。它不评级、不担保——同样的代码能否在你的环境构建,它没有测量过。
提交了通过的契约回执的不同签名密钥数量。为 1 表示只有作者;大于 1 表示还有其他人构建过。密钥是自行生成的,背后没有注册身份,因此计的是密钥而非人。
MIT-0
执行证据
声明的环境与签名的运行分开呈现,你可以看到这个样本究竟运行了什么、在哪里运行。
- 证据依据
- 签名契约通过
- 验证回执
- 2
- 构建过它的签名密钥
- 2
声明的环境
go 1.26 linux x64 go 1.26 go go
验证运行环境
| 环境 | 契约 | 阶段 | 运行日期 |
|---|---|---|---|
| go 1.26 · linux alpine/x64 · docker ed25519:a2ec939a4c60e243 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1 |
2026-08-14 |
| go 1.26 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1 |
2026-08-18 |
案例
HOW- 目标
- Hold money in shopspring/decimal without losing cents to Div, ==, or String()
- 符号
-
- decimal.NewFromString
- decimal.NewFromFloat
- decimal.DivisionPrecision
- Decimal.Equal
- Decimal.QuoRem
- Decimal.RoundBank
- Decimal.StringFixed
- 环境
- go 1.26
- 创建时间
- 2026-08-14T08:53:07Z
契约
- assert NewFromFloat(0.1).String() is "0.1" and Equal to NewFromString("0.1"), so the constructor is not where 0.1 goes wrong
- assert the loss happens in float64 before the constructor, including digits float64 cannot hold at all
- assert Go folds untyped constant 0.1+0.2 exactly, so the demo only misbehaves once the operands are variables
- assert Add and Mul are exact where the float64 equivalents give 7.000000000000001 and 3.3000000000000003
- assert Mul adds the exponents of its operands while Add and Sub keep the finer of the two, and the Sum identity decimal.Zero is New(0,1) rather than New(0,0)
- assert DivisionPrecision defaults to 16 and is a mutable global, so (1/3)*3 is 0.9999999999999999 and not 1
- assert Div rounds rather than truncates, so 2/3 ends in a 7, and DivRound takes the precision as an argument
- assert QuoRem returns the exact remainder and splitting 10.00 three ways adds back up to 10.00, while a total finer than the split scale pays out a cent more
- assert Equal compares values while == compares the *big.Int pointer and the scale, so two parses of "1.0" are not ==
- assert the zero value is a usable 0 that is Equal to decimal.Zero but not == to New(0,0)
- assert Cmp orders numerically and drops into slices.SortFunc as a method expression
- assert Round is half away from zero and RoundBank is half to even, that they agree wherever the digit ahead of the half is odd, and that the disagreement moves a four-line invoice total by two cents
- assert rounding cents through float64 obeys neither rule, because 1.005 falls below the half and 8.045 lands exactly on it
- assert String() trims trailing zeros while the exponent stays -2, and StringFixed / StringFixedBank are the money formats
- assert NewFromString rejects "1,005" instead of guessing a number
文件
- csx.json
- go.mod
- go.sum
- src/money.go
- test/main.go