Java-System.out.printf舍入浮点值



我目前正在帮助一位朋友学习一门简单的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(在幕后使用格式化程序)是圆形的,并且一直是圆形的。

相关内容

  • 没有找到相关文章

最新更新