7

Estoy tratando de convertir números en cadenas localizadas.notación exponencial localizada?

Para enteros y valores de dinero es bastante simple, ya que la cadena es solo una serie de dígitos y separadores de agrupación de dígitos. Por ejemplo:

  • 12 345 678 901 (Bulgaria)
  • 12.345.678.901 (catalán)
  • 12,345,678,901 (Inglés)
  • 12,34,56,78,901 (Hindi)
  • 12.345.678.901 (Frisia)
  • 12?345?678?901 (Pashto)
  • 12'345'678'901 (alemán)

utilizo la función Windows GetNumberFormat para formatear enteros (y GetCurrencyFormat para formatear valores monetarios).

Pero algunos números no pueden ser representados razonablemente en notación fija, y requieren scientific notation:

  • 6,0221417930 × 10

o más específicamente E notation:

  • 6.0221417930E23

¿Cómo puedo obtener la versión localizada de la notación científica?

supongo que podría construirlo usando números localizados:

6.0221417930E23 
6,0221417930E23 
6.0221417930e23 
6·0221417930E23 
6·0221417930e23 
6,0221417930e23 
6,,0221417930e23 
6.0221417930E+23 
6,0221417930E+23 
6.0221417930e+23 
6,0221417930e+23 
6·0221417930E+23 
6·0221417930e+23 
6,,0221417930e+23 
6.0221417930E23 
6,0221417930E23 
6.0221417930e23 
6,0221417930e23 
6·0221417930E23 
6·0221417930e23 
6,,0221417930e23 
6.0221417930X10^23 
6,0221417930X10^23 
6.0221417930x10^23 
6,0221417930x10^23 
6·0221417930X10^23 
6·0221417930x10^23 
6,,0221417930x10^23 
6.0221417930·10^23 
6,0221417930·^23 
6.0221417930.10^23 
6,0221417930.10^23 
6·0221417930·^23 
6·0221417930.10^23 
6,,0221417930.10^23 

pero yo no sé si otras culturas (culturas además de la mía) utilizan un E para exponenciación.

+0

Solo una nota, que es realmente una pregunta real y honesta: ¿hay realmente culturas donde la porción decimal de valores decimales tiene un separador de "milésimas"? – Romain

+0

@Romain: no veo ninguna configuración regional en Windows que provoque que 'GetNumberFormat' use cualquier agrupación de dígitos. –

Respuesta

4

Por lo que yo sé, la notación de exponenciación no es parte de los datos de configuración regional de Windows o .NET. Sin embargo, la Unicode CLDR puede ayudar a once again: Sus <numbers> sección contiene lo que busca:

/numbers/symbols/exponential dice E o su equivalente en la cultura determinada.

/numbers/scientificFormats/ muestra el patrón de exponenciación.

Deberá descargar el archivo zipped core CLDR data y extraer el archivo para cada cultura que le interese del directorio common/main.

Si desea ser capaz de admitir todas las culturas, deberá recopilar la información relevante de todos los archivos de cultura y empacarla en su propia base de datos específica. No es un trabajo muy trivial, pero es posible.

Eché un vistazo rápido a los datos en algunas culturas muy diferentes, como en, fr, zh, ru, vi, ar: Todos contienen el mismo patrón: #E0. Parece que los datos no son precisos (lo dudo seriamente) o no tiene que preocuparse realmente: todos lo hacen de la misma manera y no deberían preocuparse.

0

Para el polaco debe ser 6,0221417930 · 10 .
No creo que CLDR mencionado por Serge (gran respuesta por cierto) es válido aquí. Sin embargo, sigue siendo la mejor fuente de información. De lo contrario, tendrá que pedirle a sus traductores que traduzcan el patrón por usted (lo que requeriría un comentario con una buena explicación de lo que está haciendo).

Cuestiones relacionadas