apresentação
O padrão de DecimalFormat contém sub-padrões positivos e negativos, como "#, ## 0,00; (#, ## 0,00)":
/*** Criado por Shuai em 2016/7/11. */public class Main {public static void main (string [] args) {// valor positivo bigdecimal bigdecimal = bigdecimal.valueof (-122111515151515151.541666); // valor negativo bigdecimal bigDecimal2 = bigdecimal.valueof (122111515151515151.541666); String Pattern = "#, ## 0,00; (#, ## 0,00)"; Decimalformat decimalformat = new decimalformat (padrão); decimalformat.format (bigdecimal); System.out.println (decimalformat.format (bigdecimal)); System.out.print (decimalformat.format (bigdecimal2)); }}Saída:
(12.211.151.515.151,54) 12.211.151.515.151,54
Cada subdathern consiste em um prefixo, uma parte numérica e um sufixo. Por exemplo, o padrão positivo e negativo acima pode ter apenas prefixos e sufixos diferentes. A parte numérica leva um padrão positivo por padrão, o que significa que "#, ## 0,0#; (#)" é equivalente a "#, ## 0,0#; (#, ## 0,0#)" . ; O padrão negativo depois é opcional e pode ser nenhum, se não, o valor negativo será exibido no formulário padrão (o prefixo é " -" na maioria das regiões), como -12.211.151.515.151,54 . Curiosamente, para 0 valores, o padrão positivo será tomado:
classe pública principal {public static void main (string [] args) {bigdecimal bigdecimal = bigdecimal.valueof (-0,00); Bigdecimal bigDecimal2 = bigdecimal.valueof (0,00); String padrony = "0,00; (0,00)"; Decimalformat decimalformat = new decimalformat (padrão); decimalformat.format (bigdecimal); System.out.println (decimalformat.format (bigdecimal)); System.out.print (decimalformat.format (bigdecimal2)); }}Saída:
0,000,00
Decimalformat pode analisar as cordas diretamente:
System.out.print (decimalformat.parse (",,,, 1.515.115.26262", nova parseposição (0)));Saída:
1515115.26262
Como você pode ver, o método decimalformat.parse é removido automaticamente . Anteriormente , deve -se notar aqui que o primeiro caractere da sequência analisada deve ser um número ou seguido por um número, caso contrário, uma exceção será lançada ou analisada como nula . O segundo parâmetro de Parse especifica a posição do primeiro caractere a ser analisado. As posições de exemplo acima 0, 1, 2, 3 são todos analisados de 1 e 4, 5 são todos analisados de 5, ou seja, se é tomada , o bit é preenchido pelo número ao lado. Se houver outros caracteres, exceto e os números aparecerem antes da análise , parse parse parse analisar o dígito anterior desse personagem, ou se houver outros caracteres, exceto que os números aparecem após a pares (incluindo ), então pares parse parse parse parse para o dígito anterior desse personagem.
If pattern contains multiple groups of characters with different numbers, for example: "#,##,###,####", then it uses the group next, that is, "#,##,###,####" == "#####,####" == "##,####,####" == "##,####,####" :
classe pública principal {public static void main (string [] args) {bigdecimal bigdecimal = bigdecimal.valueof (65652323265.626262); String Pattern = "#, ##, ##, ###, ### 0,00"; String Pattern2 = "#####, ### 0,00"; String Pattern3 = "##, ####, ### 0,00"; Decimalformat decimalformat = new decimalformat (padrão); System.out.println (decimalformat.format (bigdecimal)); decimalformat.applypattern (padrão2); System.out.println (decimalformat.format (bigdecimal)); decimalformat.applypattern (padrão3); System.out.println (decimalformat.format (bigdecimal)); }}Saída:
656.5232.3265.63656.5232.3265.63656.5232.3265.63
Personagens de padrão especial
Método de contagem científica
1234 pode ser representado como 1,234 x 10^3, e o padrão é "0. ### E0", que formatará 1234 a 1.234E3.
Número de números inteiros:
O número de números significativos é derivado da soma do número mínimo de dígitos inteiros e do número máximo de dígitos decimais. Por exemplo, "## 0. ## E0" O número mínimo de dígitos inteiros é 1 e o número máximo de dígitos decimais é 2, então o número válido é 3 e o formato 12345 é "12.3E3". Exceto pelo número válido, outros itens são omitidos.
Regras de arredondamento numéricas
RoundingMode pode ser definido através do método decimalformat.SetRoundingMode. O padrão é arredondado.half_even.
Está fora de sincronia. Se acessado por vários threads, você deve implementar a sincronização por si mesmo
Recomenda -se criar uma instância de formato separada para cada thread. Se vários threads acessarem um formato ao mesmo tempo, ele deverá ser sincronizado externamente.
Exemplo
// Imprima um número usando o número localizado, número inteiro, moeda, // e o formato percentual para cada localidade local [] locales = numberFormat.GetAVailableLocales (); duplo myNumber = -1234.56; Formulário numberFormat; for (int j = 0; j <4; ++ j) {System.out.println ("formato"); for (int i = 0; i <localizes.length; ++ i) {if (locales [i] .getCountry (). comprimento () == 0) {continuação; // skip Locales-somente Locais} System.out.print (Locais [i] .getDisplayName ()); switch (j) {case 0: form = numberFormat.getInstance (locais [i]); quebrar; Caso 1: Form = númeroFormat.GetIntegerInstance (Locais [i]); quebrar; Caso 2: Form = númeroFormat.GetCurrencyInstance (Locais [i]); quebrar; Padrão: Form = numberFormat.GetPercentInstance (Locais [i]); quebrar; } if (formulário de formulário de decimalformat) {System.out.print (":" + ((decimalformat) forma) .topattern ()); } System.out.print (" ->" + form.format (myNumber)); tente {System.out.println (" ->" + form.parse (form.format (myNumber))); } catch (parseException e) {}}}Referência: endereço original
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.