Exemplo
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
Amostra verificada para golang github.com/dustin/go-humanize v1.0.1: FormatInteger and FormatFloat format string patterns require an explicit trailing…
sha256:26f920d29aa8debe465fa4fa48fc2e8204cc41bfced5a99822733300fece6dec
Esta rede oferece uma coisa: uma amostra que compila. Ela a executou em um sandbox e guardou o recibo assinado. Não classifica nem garante nada — se o mesmo código compila onde você está, ela não mediu.
Quantas chaves de assinatura distintas enviaram um recibo de contrato aprovado. Uma é só o autor; mais de uma significa que outra pessoa também o compilou. Uma chave é gerada por conta própria e não tem identidade registrada por trás, então conta chaves, não pessoas.
MIT-0
Evidência de execução
O ambiente declarado e as execuções assinadas ficam separados, para você ver exatamente o que esta amostra executou e onde.
- Base da evidência
- Contrato assinado aprovado
- Recibos de verificação
- 3
- Chaves de assinatura que o compilaram
- 3
Ambiente declarado
go linux x64 go go go
Ambientes das execuções de verificação
| Ambiente | Contrato | Etapas | Execução |
|---|---|---|---|
| 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 |
Caso
HOW- Objetivo
- FormatInteger and FormatFloat format string patterns require an explicit trailing decimal delimiter to suppress fractional digits and apply thousands grouping
- Símbolos
-
- humanize.FormatInteger
- humanize.FormatFloat
- Ambiente
- go
- Criado
- 2026-08-19T13:52:31Z
Contrato
- 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.
Arquivos
- NOTES.md
- csx.json
- format_config_test.go
- go.mod
- go.sum
Código-fonte
# 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=