Skip to content

Commit 841bf8a

Browse files
committed
#11 conteudo de DecimalFormat e movendo classes de NumberFormat
1 parent 7ae6a39 commit 841bf8a

File tree

10 files changed

+148
-18
lines changed

10 files changed

+148
-18
lines changed

book/03-localization/sections/04-formats.asc

Lines changed: 68 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,19 @@ O exame de certificação compreende quatro classes principais de formatação:
2424
. É possível obter uma instância de `NumberFormat` a partir de vários métodos estáticos, dependendo da necessidade.
2525
+
2626
[source,java,indent=0]
27-
.{java-package}/formats/NumberFormat_Instance.java
27+
.{java-package}/formats/numberformat/NumberFormat_Instance.java
2828
----
29-
include::{section-java-package}/formats/NumberFormat_Instance.java[tag=code]
29+
include::{section-java-package}/formats/numberformat/NumberFormat_Instance.java[tag=code]
3030
----
3131
+
3232
Lembre-se que, se não for informado o `Locale`, será utilizado o padrão. O ideal é sempre informar o `Locale`.
3333

3434
. O `NumberFormat` por ser utilizado para transformar números em Strings.
3535
+
3636
[source,java,indent=0]
37-
.{java-package}/formats/NumberFormat_NumberToString.java
37+
.{java-package}/formats/numberformat/NumberFormat_NumberToString.java
3838
----
39-
include::{section-java-package}/formats/NumberFormat_NumberToString.java[tag=code]
39+
include::{section-java-package}/formats/numberformat/NumberFormat_NumberToString.java[tag=code]
4040
----
4141
+
4242
.Saída no console
@@ -52,9 +52,9 @@ Perceba que a representação do número muda de acordo com o `Locale`.
5252
. O `NumberFormat` por ser utilizado para transformar Strings em números.
5353
+
5454
[source,java,indent=0]
55-
.{java-package}/formats/NumberFormat_StringToNumber.java
55+
.{java-package}/formats/numberformat/NumberFormat_StringToNumber.java
5656
----
57-
include::{section-java-package}/formats/NumberFormat_StringToNumber.java[tag=code]
57+
include::{section-java-package}/formats/numberformat/NumberFormat_StringToNumber.java[tag=code]
5858
----
5959
+
6060
.Saída no console
@@ -70,9 +70,9 @@ Perceba que dependendo do `Locale`, estamos representando um número diferente,
7070
. O `NumberFormat` por ser utilizado para transformar Strings em valores monetários, e vice-versa.
7171
+
7272
[source,java,indent=0]
73-
.{java-package}/formats/NumberFormat_Currency.java
73+
.{java-package}/formats/numberformat/NumberFormat_Currency.java
7474
----
75-
include::{section-java-package}/formats/NumberFormat_Currency.java[tag=code]
75+
include::{section-java-package}/formats/numberformat/NumberFormat_Currency.java[tag=code]
7676
----
7777
+
7878
.Saída no console
@@ -91,9 +91,9 @@ Perceba que novamente o resultado muda de acordo com o `Locale`. Além disso, n
9191
. O `NumberFormat` por ser utilizado para transformar Strings em percentuais, e vice-versa.
9292
+
9393
[source,java,indent=0]
94-
.{java-package}/formats/NumberFormat_Percent.java
94+
.{java-package}/formats/numberformat/NumberFormat_Percent.java
9595
----
96-
include::{section-java-package}/formats/NumberFormat_Percent.java[tag=code]
96+
include::{section-java-package}/formats/numberformat/NumberFormat_Percent.java[tag=code]
9797
----
9898
+
9999
.Saída no console
@@ -112,9 +112,9 @@ Veja que, ao formatar, `100%` é `1`, logo `80%` é `0,8`. Além disso, no `Loca
112112
. O `NumberFormat` pode ficar complicado ao lidar com vírgulas.
113113
+
114114
[source,java,indent=0]
115-
.{java-package}/formats/NumberFormat_Percent2.java
115+
.{java-package}/formats/numberformat/NumberFormat_Percent2.java
116116
----
117-
include::{section-java-package}/formats/NumberFormat_Percent2.java[tag=code]
117+
include::{section-java-package}/formats/numberformat/NumberFormat_Percent2.java[tag=code]
118118
----
119119
+
120120
.Saída no console
@@ -128,6 +128,62 @@ No `Locale pt_BR`, temos o resultado esperado. Porém, no `Locale en_US` o `80,2
128128

129129
==== DecimalFormat
130130

131+
Enquanto `NumberFormat` permite utilizar formatos pré definidos, `DecimalFormat` permite uma personalização maior. Um exemplo de formato para o `DecimalFormat` é `\#\##,\###.\###`.
132+
+
133+
* `#` preenche a posição com um número, ou omite se não houver nada.
134+
* `0` preenche a posição com um número, ou 0 se não houver nada.
135+
* `.` indica onde é a posição do separador decimal.
136+
* `,` indica onde é a posição do separador de grupos.
137+
138+
. É possível obter uma instância de `DecimalFormat` utilizando o construtor.
139+
+
140+
[source,java,indent=0]
141+
.{java-package}/formats/decimalformat/DecimalFormat_Instance.java
142+
----
143+
include::{section-java-package}/formats/decimalformat/DecimalFormat_Instance.java[tag=code]
144+
----
145+
+
146+
.Saída no console
147+
[source,console]
148+
----
149+
###,###.###: 12.345,67
150+
000,000.###: 012.345,67
151+
###,###.000: 12.345,670
152+
000,000.000: 012.345,670
153+
###.##: 12345,67
154+
000000.000: 012345,670
155+
###: 12346
156+
----
157+
+
158+
Estou executando o código onde o `Locale` padrão é `pt_BR`, por isso a saída no console apresenta vírgulas para separar grupos e pontos para separar os decimais.
159+
160+
. Para utilizar um `Locale` específico, é necessário instanciar um `NumberFormat` e fazer um _cast_ para `DecimalFormat`.
161+
+
162+
[source,java,indent=0]
163+
.{java-package}/formats/decimalformat/DecimalFormat_Locale.java
164+
----
165+
include::{section-java-package}/formats/decimalformat/DecimalFormat_Locale.java[tag=code]
166+
----
167+
+
168+
.Saída no console
169+
[source,console]
170+
----
171+
12,345.67
172+
----
173+
174+
. É possível colocar outros símbolos ou palavras no formato do `DecimalFormat`.
175+
+
176+
[source,java,indent=0]
177+
.{java-package}/formats/decimalformat/DecimalFormat_Strings.java
178+
----
179+
include::{section-java-package}/formats/decimalformat/DecimalFormat_Strings.java[tag=code]
180+
----
181+
+
182+
.Saída no console
183+
[source,console]
184+
----
185+
Número 12.345,67 formatado
186+
----
131187

132188
==== DateTimeFormatter
133189
==== DateFormat
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.j6toj8.localization.formats.decimalformat;
2+
3+
import java.text.DecimalFormat;
4+
5+
public class DecimalFormat_Instance {
6+
7+
public static void main(String[] args) {
8+
// tag::code[]
9+
double d = 12345.67;
10+
11+
// omite todas as posições vazias, utiliza separador a cada 3 casas
12+
DecimalFormat instance1 = new DecimalFormat("###,###.###");
13+
System.out.println("###,###.###: " + instance1.format(d));
14+
15+
// omite as posições vazias na parte decimal, utiliza separador a cada 3 casas
16+
DecimalFormat instance2 = new DecimalFormat("000,000.###");
17+
System.out.println("000,000.###: " + instance2.format(d));
18+
19+
// omite as posições vazias na parte inteira, utiliza separador a cada 3 casas
20+
DecimalFormat instance3 = new DecimalFormat("###,###.000");
21+
System.out.println("###,###.000: " + instance3.format(d));
22+
23+
// apresenta todas as posições, utiliza separador a cada 3 casas
24+
DecimalFormat instance4 = new DecimalFormat("000,000.000");
25+
System.out.println("000,000.000: " + instance4.format(d));
26+
27+
// omite todas as posições vazias, não utiliza separador
28+
DecimalFormat instance5 = new DecimalFormat("###.##");
29+
System.out.println("###.##: " + instance5.format(d));
30+
31+
// apresenta todas as posições, não utiliza separador
32+
DecimalFormat instance6 = new DecimalFormat("000000.000");
33+
System.out.println("000000.000: " + instance6.format(d));
34+
35+
// omite todas as posições vazias, não utiliza separador e não apresenta casas decimais
36+
DecimalFormat instance7 = new DecimalFormat("###");
37+
System.out.println("###: " + instance7.format(d));
38+
// end::code[]
39+
}
40+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.j6toj8.localization.formats.decimalformat;
2+
3+
import java.text.DecimalFormat;
4+
import java.text.NumberFormat;
5+
import java.util.Locale;
6+
7+
public class DecimalFormat_Locale {
8+
9+
public static void main(String[] args) {
10+
// tag::code[]
11+
double d = 12345.67;
12+
13+
NumberFormat numberFormatUS = NumberFormat.getNumberInstance(Locale.US);
14+
DecimalFormat decimalFormatUS = (DecimalFormat) numberFormatUS;
15+
decimalFormatUS.applyLocalizedPattern("###,###.###");
16+
System.out.println(decimalFormatUS.format(d));
17+
// end::code[]
18+
}
19+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.j6toj8.localization.formats.decimalformat;
2+
3+
import java.text.DecimalFormat;
4+
5+
public class DecimalFormat_Strings {
6+
7+
public static void main(String[] args) {
8+
// tag::code[]
9+
double d = 12345.67;
10+
11+
DecimalFormat decimalFormat = new DecimalFormat("Número ###,###.### formatado");
12+
System.out.println(decimalFormat.format(d));
13+
// end::code[]
14+
}
15+
}

src/org/j6toj8/localization/formats/NumberFormat_Currency.java renamed to src/org/j6toj8/localization/formats/numberformat/NumberFormat_Currency.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.j6toj8.localization.formats;
1+
package org.j6toj8.localization.formats.numberformat;
22

33
import java.text.NumberFormat;
44
import java.text.ParseException;

src/org/j6toj8/localization/formats/NumberFormat_Instance.java renamed to src/org/j6toj8/localization/formats/numberformat/NumberFormat_Instance.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.j6toj8.localization.formats;
1+
package org.j6toj8.localization.formats.numberformat;
22

33
import java.text.NumberFormat;
44
import java.util.Locale;

src/org/j6toj8/localization/formats/NumberFormat_NumberToString.java renamed to src/org/j6toj8/localization/formats/numberformat/NumberFormat_NumberToString.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.j6toj8.localization.formats;
1+
package org.j6toj8.localization.formats.numberformat;
22

33
import java.text.NumberFormat;
44
import java.util.Locale;

src/org/j6toj8/localization/formats/NumberFormat_Percent.java renamed to src/org/j6toj8/localization/formats/numberformat/NumberFormat_Percent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.j6toj8.localization.formats;
1+
package org.j6toj8.localization.formats.numberformat;
22

33
import java.text.NumberFormat;
44
import java.text.ParseException;

src/org/j6toj8/localization/formats/NumberFormat_Percent2.java renamed to src/org/j6toj8/localization/formats/numberformat/NumberFormat_Percent2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.j6toj8.localization.formats;
1+
package org.j6toj8.localization.formats.numberformat;
22

33
import java.text.NumberFormat;
44
import java.text.ParseException;

src/org/j6toj8/localization/formats/NumberFormat_StringToNumber.java renamed to src/org/j6toj8/localization/formats/numberformat/NumberFormat_StringToNumber.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.j6toj8.localization.formats;
1+
package org.j6toj8.localization.formats.numberformat;
22

33
import java.text.NumberFormat;
44
import java.text.ParseException;

0 commit comments

Comments
 (0)