sprintf and printfn float formats %e, %g, and %f differ from .NET
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- javascript, typescript
- Área
- backend
Línea de trabajo
Start by locating Fable's implementation of sprintf and printfn float formatting, then compare its %e, %g, and %f behavior with the .NET expectations and repro cases in the issue. Run the relevant formatting tests and add coverage for the listed edge cases, including precision zero and negative zero. Done when the outputs match the expected results and %.0g no longer throws.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
In Fable 5.27.0 targeting JavaScript/TypeScript, sprintf/printfn float format specifiers %e/%E, %g/%G, and %f diverge from .NET (String.Format in the same runtime already follows the .NET rules), and %.0g throws a RangeError (regression from 5.26.0).
Per the F# plaintext formatting reference, %e/%E defaults to precision 6 with a 3-digit exponent and matching case, %g/%G strips trailing zeros (treating precision 0 as default), %f never switches to exponential notation, and negative zero keeps its - sign.
Repro code
for s in [
sprintf "%e" 3.0
sprintf "%E" 3.0
sprintf "%.2g" 1e301
sprintf "%.8g" 0.0
sprintf "%.4e" -0.0
sprintf "%f" -0.0
sprintf "%.0f" 1e21
sprintf "%.0g" 2.5
] do
printfn "%s" s
Expected and actual results
Expected (.NET 10):
3.000000e+000
3.000000E+000
1e+301
0
-0.0000e+000
-0.000000
1000000000000000000000
2.5
Actual under Fable 5.27.0 (Node.js v24.14.1): the first seven lines print 3e+0, 3e+0, 1.0e+301, 0.0000000, 0.0000e+0, 0.000000, and 1e+21, and sprintf "%.0g" 2.5 throws RangeError: toPrecision() argument must be between 1 and 100.
Related information
- Fable version: 5.27.0
- Operating system: macOS 26.3 (Node.js v24.14.1, .NET 10)
Credit: https://ucsbplse.github.io/
- Lenguaje dominante
- F#
- Estrellas
- 3.2k
- Forks
- 335
- Merge medio
- 19 h 39 min
- PR fusionados (30 d)
- 158
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de fable-compiler/Fable
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
fable-compiler/Fable#5280 ·
Los mantenedores suelen responder en 1 día
-
agentic-workflows automation repo-assist
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
fable-compiler/Fable#4531 ·
Los mantenedores suelen responder en 1 día
-
agentic-workflows automation repo-assist
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
fable-compiler/Fable#4522 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
fable-compiler/Fable#5286 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 36/100
fable-compiler/Fable#5285 ·
Los mantenedores suelen responder en 1 día
Todos los issues de fable-compiler/Fable
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 2 días
-
desktop v3 windows
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
esengine/DeepSeek-Reasonix#15016 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[yugabyted] xcluster set_up and add_to_replication fail for database names containing - . or (Abiertokind/bug priority/medium qa_automation
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
yugabyte/yugabyte-db#37324 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
balovess/aria2_rust#88 ·
-
good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 87/100
btclib-org/btclib-node#2260 ·
Los mantenedores suelen responder en 1 día