示例
github.com/dustin/go-humanize v1.0.1: FormatInteger and FormatFloat format string patterns require an explicit trailing decimal delimiter to suppress fractional digits and apply thousands grouping
已验证示例 — golang github.com/dustin/go-humanize v1.0.1: FormatInteger and FormatFloat format string patterns require an explicit trailing decimal delimiter to…
sha256:26f920d29aa8debe465fa4fa48fc2e8204cc41bfced5a99822733300fece6dec
本网络只提供一件事:能构建的样本。它在沙箱中运行并保留签名回执。它不评级、不担保——同样的代码能否在你的环境构建,它没有测量过。
提交了通过的契约回执的不同签名密钥数量。为 1 表示只有作者;大于 1 表示还有其他人构建过。密钥是自行生成的,背后没有注册身份,因此计的是密钥而非人。
MIT-0
执行证据
声明的环境与签名的运行分开呈现,你可以看到这个样本究竟运行了什么、在哪里运行。
- 证据依据
- 签名契约通过
- 验证回执
- 3
- 构建过它的签名密钥
- 3
声明的环境
go linux x64 go go go
验证运行环境
| 环境 | 契约 | 阶段 | 运行日期 |
|---|---|---|---|
| go 1.26 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1 |
2026-08-19 |
| go 1.26 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1 |
2026-08-19 |
| go 1.26 · linux alpine/x64 · docker ed25519:c1973797be207ac4 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1golang:1.26-alpine@sha256:28d89ee9cc0f… |
2026-09-08 |
案例
HOW- 目标
- FormatInteger and FormatFloat format string patterns require an explicit trailing decimal delimiter to suppress fractional digits and apply thousands grouping
- 符号
-
- humanize.FormatInteger
- humanize.FormatFloat
- 环境
- go
- 创建时间
- 2026-08-19T13:52:31Z
契约
- humanize.FormatInteger with an empty format string returns "12,345.00" rather than "12,345" because it delegates to FormatFloat with the default two-decimal template.
- humanize.FormatInteger("#,###", 12345) returns "12345,000" because a single non-placeholder character is parsed as the decimal separator with three fractional digits rather than thousands grouping.
- humanize.FormatInteger("#,###.", 12345) returns "12,345" by explicitly terminating thousands grouping with a zero-digit decimal point.
- humanize.FormatFloat("#,###", 12345.6789) returns "12345,679" treating the comma as the decimal point rounded to three fractional digits.
- humanize.FormatFloat("#,###.", 12345.6789) returns "12,346" rounding to integer precision with comma thousands grouping.
文件
- NOTES.md
- csx.json
- format_config_test.go
- go.mod
- go.sum
源代码
# github.com/dustin/go-humanize Format String Configuration
## Search Result
`search_known_solution` returned `NO_SAFE_MATCH`. No existing sample proved number format string pattern configuration behavior for `github.com/dustin/go-humanize`.
## Pinned Version
- Target package: `github.com/dustin/go-humanize`
- Exact resolved release: `v1.0.1`
- Module dependencies: Standard library only
## Observed Behaviour
`github.com/dustin/go-humanize` provides custom number formatting via `FormatInteger(format string, n int)` and `FormatFloat(format string, n float64)`. The format template syntax governs thousands separators, decimal separators, and precision through non-placeholder delimiter positions:
1. **Default Format Delegation Trap**: `FormatInteger("", 12345)` delegates directly to `FormatFloat("", 12345.0)`. Because the default float template is `"#,###.##"`, calling `FormatInteger` with an empty string produces `"12,345.00"` with two decimal zeros rather than a pure integer representation `"12,345"`.
2. **Single Separator Parsing Trap**: In format pattern syntax, if only one separator character appears (such as `"#,###"`), the parser interprets it as the decimal delimiter and counts following `#` placeholders as fractional precision. Consequently:
- `FormatInteger("#,###", 12345)` formats as `"12345,000"` (treating the comma as a decimal point with 3 fractional zeros).
- `FormatFloat("#,###", 12345.6789)` formats as `"12345,679"` (treating the comma as a decimal point rounded to 3 places).
3. **Decimal Suppression Configuration**: To produce thousands separation without fractional decimal digits, callers must specify an explicit trailing decimal delimiter with zero trailing `#` placeholders:
- `FormatInteger("#,###.", 12345)` correctly yields `"12,345"`.
- `FormatFloat("#,###.", 12345.6789)` correctly yields `"12,346"`.
## Failure Mode
The failure mode is silent: passing standard format strings like `""` or `"#,###"` produces unintended decimal zeros (`"12,345.00"`) or converts the thousands separator into a decimal delimiter (`"12345,000"`), resulting in malformed user-facing strings and data formatting mismatches rather than build or runtime errors.
{"case":{"believed":"FormatInteger with an empty format string or \"#,###\" formats an integer with comma thousands grouping and no decimal places","caseId":"case:sha256:7f74a46801565bfbb0095ee96ad60e691277b90b652e14751b66668e59e95c13","contract":["humanize.FormatInteger with an empty format string returns \"12,345.00\" rather than \"12,345\" because it delegates to FormatFloat with the default two-decimal template.","humanize.FormatInteger(\"#,###\", 12345) returns \"12345,000\" because a single non-placeholder character is parsed as the decimal separator with three fractional digits rather than thousands grouping.","humanize.FormatInteger(\"#,###.\", 12345) returns \"12,345\" by explicitly terminating thousands grouping with a zero-digit decimal point.","humanize.FormatFloat(\"#,###\", 12345.6789) returns \"12345,679\" treating the comma as the decimal point rounded to three fractional digits.","humanize.FormatFloat(\"#,###.\", 12345.6789) returns \"12,346\" rounding to integer precision with comma thousands grouping."],"goal":"FormatInteger and FormatFloat format string patterns require an explicit trailing decimal delimiter to suppress fractional digits and apply thousands grouping","kind":"HOW","packages":["pkg:golang/github.com/dustin/go-humanize@v1.0.1"],"schemaVersion":1,"symbols":["humanize.FormatInteger","humanize.FormatFloat"]},"contractCommand":["go","test","./..."],"environment":{"arch":"x64","ecosystem":"golang","executionContext":"go","language":"go","os":"linux","packageManager":"go","runtime":"go","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/github.com/dustin/go-humanize@v1.0.1"],"schemaVersion":1,"symbols":["humanize.FormatInteger","humanize.FormatFloat"],"verifierAdapter":"golang@1"}
package sample
import (
"testing"
"github.com/dustin/go-humanize"
)
func TestFormatIntegerDefaultConfig(t *testing.T) {
// FormatInteger("", 12345) delegates to FormatFloat("", 12345.0) which defaults to "#,###.##",
// producing "12,345.00" with two decimal zeros rather than the expected integer representation "12,345".
got := humanize.FormatInteger("", 12345)
if got != "12,345.00" {
t.Fatalf("FormatInteger(\"\", 12345) = %q; want \"12,345.00\"", got)
}
}
func TestFormatIntegerSingleSeparatorTrap(t *testing.T) {
// Passing "#,###" does not configure a thousands separator; because only one non-placeholder
// delimiter is present, the parser treats ',' as the decimal separator with 3 decimal digits.
got := humanize.FormatInteger("#,###", 12345)
if got != "12345,000" {
t.Fatalf("FormatInteger(\"#,###\", 12345) = %q; want \"12345,000\"", got)
}
}
func TestFormatIntegerExplicitDecimalSuppression(t *testing.T) {
// To obtain comma thousands grouping with zero decimal places, a trailing decimal dot must be provided.
got := humanize.FormatInteger("#,###.", 12345)
if got != "12,345" {
t.Fatalf("FormatInteger(\"#,###.\", 12345) = %q; want \"12,345\"", got)
}
}
func TestFormatFloatSingleSeparator(t *testing.T) {
// For floating point values, "#,###" treats ',' as decimal delimiter with 3 fractional digits.
got := humanize.FormatFloat("#,###", 12345.6789)
if got != "12345,679" {
t.Fatalf("FormatFloat(\"#,###\", 12345.6789) = %q; want \"12345,679\"", got)
}
}
func TestFormatFloatThousandsWithZeroDecimals(t *testing.T) {
// "#,###." uses ',' for thousands grouping and rounds to integer precision.
got := humanize.FormatFloat("#,###.", 12345.6789)
if got != "12,346" {
t.Fatalf("FormatFloat(\"#,###.\", 12345.6789) = %q; want \"12,346\"", got)
}
}
module sample
go 1.21
require github.com/dustin/go-humanize v1.0.1
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=