我目前正在帮助一位朋友学习一门简单的Java入门课程,编写将华氏温度转换为摄氏温度的代码。
我惊讶地发现,System.out.printf()
似乎对我的结果进行了舍入,例如-17.7..
变成了-17.77778
,%.5f
作为格式字符串。一直都是这样吗,因为我相信记得它截断了浮点值吗?
为了清晰起见,这里有一个代码片段:http://ideone.com/LGq0wt
public class Main
{
public static void main(String[]args)
{
int k;
for(k=0;k<=300;k++)
{
System.out.format("%dtt%.5fn",k, (5f/9f) * ((float)k - 32f));
}
}
}
输出:
0 -17.77778
1 -17.22222
2 -16.66667
3 -16.11111
4 -15.55556
5 -15.00000
6 -14.44444
7 -13.88889
8 -13.33333
9 -12.77778
10 -12.22222
11 -11.66667
12 -11.11111
13 -10.55556
14 -10.00000
15 -9.44444
16 -8.88889
17 -8.33333
18 -7.77778
19 -7.22222
20 -6.66667
21 -6.11111
22 -5.55556
23 -5.00000
24 -4.44444
25 -3.88889
26 -3.33333
27 -2.77778
28 -2.22222
29 -1.66667
30 -1.11111
31 -0.55556
32 0.00000
33 0.55556
34 1.11111
35 1.66667
36 2.22222
37 2.77778
38 3.33333
39 3.88889
40 4.44444
41 5.00000
42 5.55556
43 6.11111
44 6.66667
45 7.22222
46 7.77778
47 8.33333
48 8.88889
49 9.44444
50 10.00000
51 10.55556
52 11.11111
53 11.66667
54 12.22222
55 12.77778
56 13.33333
57 13.88889
58 14.44444
59 15.00000
60 15.55556
61 16.11111
62 16.66667
63 17.22222
64 17.77778
65 18.33333
66 18.88889
67 19.44444
68 20.00000
69 20.55556
70 21.11111
71 21.66667
72 22.22222
73 22.77778
74 23.33333
75 23.88889
76 24.44445
77 25.00000
78 25.55556
79 26.11111
80 26.66667
81 27.22222
82 27.77778
83 28.33333
84 28.88889
85 29.44445
86 30.00000
87 30.55556
88 31.11111
89 31.66667
90 32.22223
91 32.77778
92 33.33334
93 33.88889
94 34.44445
95 35.00000
96 35.55556
97 36.11111
98 36.66667
99 37.22223
100 37.77778
101 38.33334
102 38.88889
103 39.44445
104 40.00000
105 40.55556
106 41.11111
107 41.66667
108 42.22223
109 42.77778
110 43.33334
111 43.88889
112 44.44445
113 45.00000
114 45.55556
115 46.11111
116 46.66667
117 47.22223
118 47.77778
119 48.33334
120 48.88889
121 49.44445
122 50.00000
123 50.55556
124 51.11111
125 51.66667
126 52.22223
127 52.77778
128 53.33334
129 53.88889
130 54.44445
131 55.00000
132 55.55556
133 56.11111
134 56.66667
135 57.22223
136 57.77778
137 58.33334
138 58.88889
139 59.44445
140 60.00000
141 60.55556
142 61.11111
143 61.66667
144 62.22223
145 62.77778
146 63.33334
147 63.88889
148 64.44445
149 65.00000
150 65.55556
151 66.11111
152 66.66667
153 67.22223
154 67.77778
155 68.33334
156 68.88889
157 69.44445
158 70.00000
159 70.55556
160 71.11111
161 71.66667
162 72.22223
163 72.77778
164 73.33334
165 73.88889
166 74.44445
167 75.00000
168 75.55556
169 76.11111
170 76.66667
171 77.22223
172 77.77778
173 78.33334
174 78.88889
175 79.44445
176 80.00000
177 80.55556
178 81.11111
179 81.66667
180 82.22223
181 82.77778
182 83.33334
183 83.88889
184 84.44445
185 85.00001
186 85.55556
187 86.11111
188 86.66667
189 87.22223
190 87.77778
191 88.33334
192 88.88889
193 89.44445
194 90.00001
195 90.55556
196 91.11111
197 91.66667
198 92.22223
199 92.77778
200 93.33334
201 93.88889
202 94.44445
203 95.00001
204 95.55556
205 96.11111
206 96.66667
207 97.22223
208 97.77779
209 98.33334
210 98.88889
211 99.44445
212 100.00001
213 100.55556
214 101.11111
215 101.66667
216 102.22223
217 102.77779
218 103.33334
219 103.88889
220 104.44445
221 105.00001
222 105.55556
223 106.11111
224 106.66667
225 107.22223
226 107.77779
227 108.33334
228 108.88889
229 109.44445
230 110.00001
231 110.55556
232 111.11111
233 111.66667
234 112.22223
235 112.77779
236 113.33334
237 113.88889
238 114.44445
239 115.00001
240 115.55556
241 116.11111
242 116.66667
243 117.22223
244 117.77779
245 118.33334
246 118.88889
247 119.44445
248 120.00001
249 120.55556
250 121.11111
251 121.66667
252 122.22223
253 122.77779
254 123.33334
255 123.88889
256 124.44445
257 125.00001
258 125.55556
259 126.11111
260 126.66667
261 127.22223
262 127.77779
263 128.33334
264 128.88890
265 129.44446
266 130.00000
267 130.55556
268 131.11111
269 131.66667
270 132.22223
271 132.77779
272 133.33334
273 133.88890
274 134.44446
275 135.00000
276 135.55556
277 136.11111
278 136.66667
279 137.22223
280 137.77779
281 138.33334
282 138.88890
283 139.44446
284 140.00000
285 140.55556
286 141.11111
287 141.66667
288 142.22223
289 142.77779
290 143.33334
291 143.88890
292 144.44446
293 145.00000
294 145.55556
295 146.11111
296 146.66667
297 147.22223
298 147.77779
299 148.33334
300 148.88890
根据java.util.Formatter API:
对于浮点转换"a"、"a"、"e"、"e"one_answers"f",精度是基点后的位数。如果转换为"g"或"g",则精度为舍入后得到的幅值中的总位数。
所以printf(在幕后使用格式化程序)是圆形的,并且一直是圆形的。