數值類型之間的轉換
6個實心箭頭箭頭表示無信息丟失的轉換;
3個虛箭頭表示可能有精度損失的轉換.
當使用上面兩個數值進行二元操作時,先要將兩個操作數轉換為同一類型,然后再進行計算.
規則:`兩個數中小類型的值將自動轉換為大類型的值.
小轉大可以,但是大轉小會損失精度,則需要強制轉換.
強制類型轉換
語法格式
在圓括號中給出想要轉換的目標類型,后面緊跟待轉換的變量名.
例:
double m = 9.99;
int n = (int)m;
其中n的值為9.
強制類型轉換通過截斷小數部分將浮點值轉換為整形.
math.round()
返回最接近參數的 int。結果將舍入為整數:加上 1/2,對結果調用 floor 并將所得結果強制轉換為 int 類型。換句話說,結果等于以下表達式的值:
(int)math.floor(a + 0.5f)
特殊情況如下:
如果參數為 nan,那么結果為 0。
如果結果為負無窮大或任何小于等于 integer.min_value 的值,那么結果等于 integer.min_value 的值。
如果參數為正無窮大或任何大于等于 integer.max_value 的值,那么結果等于 integer.max_value 的值。
public static int round(float a) :
若傳入round方法的值為float,返回值為int,可直接用int類型的值接收即可.
public static long round(double a) :
但傳入round方法的值為double時,返回值為long,則需要手動強轉為int類型.
代碼示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class mathrounddemo { public static void main(string[] args) { double a = 1.847 ; system.out.println(math.round(a)); float b = 1 .847f; system.out.println(math.round(b)); int c = ( int )math.round(a); system.out.println(c); system.out.println(math.round(a* 100 )/ 100.0 ); system.out.printf( "%.2f" ,a); } } /*輸出: 2 2 2 1.85 1.85 */ |
代碼分析:
float b = 1.847f;若不添加后綴f,則需要將1.847進行強轉,默認小數位double類型.賦給float(大轉小會損失精度,則需要強制轉換).
int c = (int)math.round(a);傳入的參數為double類型,返回類型為long,同理,大轉小,需要強制轉換.
對于想要進行小數位數的保留方法,此代碼中想要1.847保留小數點后兩位:
system.out.println(math.round(a*100)/100.0);
原理:小數點先右移兩位后應用math.round方法進行四舍五入后,在將小數點向左移兩位.
system.out.printf("%.2f",a);
原理:應用了格式化輸出,推薦使用這種方式簡單高效穩定.具體介紹請看:java中格式化輸出
以上所述是小編給大家介紹的java數值類型的轉換與強制轉換詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://blog.csdn.net/qq_36852780/article/details/89048556#_3