CodeSampleX

Exemple

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

Échantillon vérifié pour golang github.com/dustin/go-humanize v1.0.1: FormatInteger and FormatFloat format string patterns require an explicit trailing…

sha256:26f920d29aa8debe465fa4fa48fc2e8204cc41bfced5a99822733300fece6dec

Ce réseau offre une seule chose : un échantillon qui compile. Il l'a exécuté dans un bac à sable et conservé le reçu signé. Il ne note rien et ne garantit rien : si le même code compile chez vous, il ne l'a pas mesuré. Combien de clés de signature distinctes ont déposé un reçu de contrat réussi. Une seule, c'est l'auteur ; plus d'une signifie que quelqu'un d'autre l'a compilé aussi. Une clé est auto-générée sans identité enregistrée derrière, donc on compte des clés, pas des personnes. MIT-0

Preuves d'exécution

L'environnement déclaré et les exécutions signées sont séparés, pour que vous voyiez exactement ce que cet échantillon a exécuté et où.

Base de preuve
Contrat signé réussi
Reçus de vérification
3
Clés de signature qui l’ont compilé
3
Environnement déclaré go linux x64 go go go

Environnements des exécutions de vérification

Environnement Contrat Étapes Exécution
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

Cas

HOW
Objectif
FormatInteger and FormatFloat format string patterns require an explicit trailing decimal delimiter to suppress fractional digits and apply thousands grouping
Paquets
Symboles
  • humanize.FormatInteger
  • humanize.FormatFloat
Environnement
go
Créé
2026-08-19T13:52:31Z

Contrat

  1. 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.
  2. 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.
  3. humanize.FormatInteger("#,###.", 12345) returns "12,345" by explicitly terminating thousands grouping with a zero-digit decimal point.
  4. humanize.FormatFloat("#,###", 12345.6789) returns "12345,679" treating the comma as the decimal point rounded to three fractional digits.
  5. humanize.FormatFloat("#,###.", 12345.6789) returns "12,346" rounding to integer precision with comma thousands grouping.

Fichiers

  • NOTES.md
  • csx.json
  • format_config_test.go
  • go.mod
  • go.sum

Télécharger l’artefact source (tar.gz)

Code source

NOTES.md
# 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.
csx.json
{"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"}
format_config_test.go
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)
	}
}
go.mod
module sample

go 1.21

require github.com/dustin/go-humanize v1.0.1
go.sum
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=

Seeder d'origine

csx-seed