導航:首頁 > 編程語言 > java精度計算

java精度計算

發布時間:2023-03-25 03:43:36

1. java 中float 、double的精度問題: float 、double取值范圍是怎麼樣計算出來的

float和double都是遵循IEEE754標準的,內存單元里都是劃分為三部分的:符號位 階碼 尾數。
其中
float的符號位佔一位,階碼為8位,尾數為23位,所以一共四個位元組;double的符號位佔一位,階碼為11位,尾數52位。符號位為0的話說明是
正的,為1的話說明是負的;階碼就是尾數所要乘以的2的次方數;尾數默認是去掉整數位的1的,也就是說加入尾數序列為01010101(後面還有很多),
那麼其實它是1.01010101(後面還有很多)。比如一個float類型的變數,其符號位為0,階碼化成十進制為3,尾數為01000000(後面都是0),那
么這個變數化為十進制的話就是1.25*(2^3)=10。
int類型佔四個位元組,但是它不是像float那樣表示的和液,int除了符喚模物號位之外其他位都是表示數值的,沒有表示階碼的,所以它的范圍比float小很多。
下面是維基網路上的一點解釋,可以碼局參考一下。

http://zh.wikipedia.org/zh-cn/IEEE_754
不清楚的話還是先看看計算機原理的書或者追問,希望有幫助~

2. java 中 精度計算BigDecimal 是永遠不會丟失精度的嗎,小數點後面幾位都不會

精度由BigDecimal對象在創建時設定的或默認的MathContext算術環境對象決定。
精度precision的十進制有效數字位數可以指定的。小數點後幾位等按有效數位的規則。
精度為0時,代表無限位數的准確精度。此時遇到計算1/3輸出的循環小數1.333333..會拋出算術異常,而不是返回有限的有效數字結果。

3. 怎麼控制精度在java

JAVA中如何對double或者float的浮點數進行精度計算,在JAVA中提供了多種參數來實現精度的不同控制方式。具體例子如下:行春
轉自http://stephen830.iteye.com/blog/260776

Java代碼
/*
*Createdon2005-6-5
*Authorstephen
*Emailzhoujianqiang鎮猛ATgmailDOTcom
*CopyRight(C)2005-2008,Allrightsreserved.
*/
packagecom.soft4j.utility;

importjava.math.BigDecimal;

/**
*與小數位精度(四捨五入等)相關的一些常用工具方法.
*
*float/double的精度取值方式分為以下幾種:<br>
*java.math.BigDecimal.ROUND_UP<br>
*java.math.BigDecimal.ROUND_DOWN<br>
*java.math.BigDecimal.ROUND_CEILING<br>
*java.math.BigDecimal.ROUND_FLOOR<br>
*java.math.BigDecimal.ROUND_HALF_UP<br>
*java.math.BigDecimal.ROUND_HALF_DOWN<br>
*java.math.BigDecimal.ROUND_HALF_EVEN<br>
*
*@authorstephen
*@version1.0.0
*/
publicfinalclassRoundTool{

/**
*對double數據進行取精度.
*<p>
*Forexample:<br>
*doublevalue=100.345678;<br>
*doubleret=round(value,4,BigDecimal.ROUND_HALF_UP);<br>
*ret為100.3457<br>
*
*@paramvalue
*double數據.
*@paramscale
*精度位數(保留的小數位數).
*@paramroundingMode
*精度取值方式.
*@return精度計算後的數據.
*/
publicstaticdoubleround(doublevalue,intscale,introundingMode){
BigDecimalbd=newBigDecimal(value);
bd=bd.setScale(scale,roundingMode);
doubled=bd.doubleValue();
bd=null;
returnd;
}

/**
*測試用的main方法.
*
*@paramargc
*運行參數.
御帶橋*/
publicstaticvoidmain(String[]argc){
//下面都以保留2位小數為例

//ROUND_UP
//只要第2位後面存在大於0的小數,則第2位就+1
System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35
System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35
//ROUND_DOWN
//與ROUND_UP相反
//直接舍棄第2位後面的所有小數
System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34
System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34
//ROUND_CEILING
//如果數字>0則和ROUND_UP作用一樣
//如果數字<0則和ROUND_DOWN作用一樣
System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35
System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34
//ROUND_FLOOR
//如果數字>0則和ROUND_DOWN作用一樣
//如果數字<0則和ROUND_UP作用一樣
System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34
System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
//ROUND_HALF_UP[這種方法最常用]
//如果第3位數字>=5,則第2位數字+1
//備注:只看第3位數字的值,不會考慮第3位之後的小數的
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
//ROUND_HALF_DOWN
//如果第3位數字>=5,則做ROUND_UP
//如果第3位數字<5,則做ROUND_DOWN
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
//ROUND_HALF_EVEN
//如果第3位是偶數,則做ROUND_HALF_DOWN
//如果第3位是奇數,則做ROUND_HALF_UP
System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35
}
}

如果要求精確控制位數,推薦使用BigDecimal,這是在JDK1.4版本之後推薦的一個處理精度的類。

4. java數值類型精度問題,求救高手,高手請進,瞎說的走開!

java中..直接書寫整數..那梁檔么他的類型是int..

直接書寫小數他的類型是double..

java中..運算式結果的類型..是該運算式中..類型範圍最大的..

比如..int + long結果就是long類型..因為long類型範圍比int大..這樣結果才不會損失精度..

你題目中..

7是int..3也是int..

所以7/3也是int..並且值橡租亂是2..因為7/3等於2點幾..轉成int就把小數切掉..所以是2..

所以
int i=7/3;//相當於是把2賦值給一個int類型的變數i
float f=7/3;//相當於是把2轉換成float變成2.0賦值給一個float類型的變數f
double d=7/型肢3;//相當於是把2轉換成double變成2.0賦值給一個double類型的變數d

明白了么..

所以要想達到你要的效果..

float f=7/3;
double d=7/3;
這兩個裡面就需要把7或者3轉成float或者double再計算機..這樣計算結果就是float或者double..就不會切掉小數了..

即改成
float f=7/3f;//java中float數據就是在數字後面加個f或者F表示這個數是float類型
double d=7/3.0;//直接加個.0就是double了..也可以(double)7/3..就是把7轉成double再計算..

希望能幫到你..

5. JAVA 中除法後小數精度問題

你說的這個問題涉及到數字精度問題,在程序中,數字運算總是低精度的向高精度的自動轉化。比如(int)/(float)就會得到你想要的小數數位,這是由數字在計算機中的運算方式決定的。如果你用3/5.0或者3.0/5,你就可以得到你想要的小數。
在計算機中,整型(int)和浮點(float,double)的表示形式各不相同,佔用內存空間也不同,在運算時,為了得到正確的結果,就要進行對位,如果數據類型不一致,就要進行轉化。在硬體層面上就是把佔用內存少的整型向浮點轉換,也就是為這個整型添加額外的位元組參與運算,盡管這些位元組中都是0,這是數字精度的問題。
現在是兩個整形數,運算時,計算機認為不需要進行數據類型的轉化,所以就得到你見到的結果。

6. java中的精度是什麼意思

1.精度是指的各種數碰友據類型的位寬

byte 8 位
short 16 位
int 32 位
long 64 位
float 32 位
double 64 位
char 16 位
2.數據降級都會損失精度的,體現在各種數據類型能表示的范圍不一樣。舉個例子,float 32 位,根據 IEEE 754 32位 標准,首位正負位,後面 8 位指數位,餘下 23 位是小數位;
double 64 位,根據 IEEE 754 64位 標准,首位正負位,後面 11 位指數橋猛位,餘下 52 位是小數位。
相比之下當然位數愈多精度愈高了,其他敏吵橋整數類型的精度就簡單了,首位表示正負,所有的都表示數值,位數越高當然精度越高。

7. 關於java單精度與雙精度的問題

單簡悄鉛精度和雙精度的區別就是,雙精度要比單精度所存儲的位數要多,至於說3.14師雙精度,是因為Java中,默認的小數都是double類型,也就算雙精度的,如果要定義單精度的話,那就要在小數的後面加上一個f或者F,即 double d = 3.14; float f = 3.14f; 一定要注意後面有沒有「f」運蠢和「F」啊,這個初學的時候,經常會考攔好到。樓上說的,是對,但是,他那樣寫,就一定會報錯。記住,單精度的變數定義,一定要在值的後面加上標識。

8. java中整數型的精度是幾位

就是把類似耐臘"1234"的字元串轉換成整型?
string
str="1234";//截取的字元串數字
int
m=integer.parseint(str);//轉換後的結果
試下昌罩滑,有疑悶鏈惑歡迎追問。

閱讀全文

與java精度計算相關的資料

熱點內容
有pdf卻打不開 瀏覽:460
七星彩軟體app怎麼下載 瀏覽:217
32單片機的重映射哪裡改 瀏覽:816
為什麼前端不用刷演算法題 瀏覽:708
對稱加密系統和公鑰加密系統 瀏覽:428
歷史地理pdf 瀏覽:606
物聯網雲伺服器框架 瀏覽:648
sybaseisql命令 瀏覽:183
android權威編程指南pdf 瀏覽:663
哪些軟體屬於加密軟體 瀏覽:646
文件夾75絲什麼意思 瀏覽:470
最便宜sop8單片機 瀏覽:966
圖解周易預測學pdf 瀏覽:420
c盤莫名奇妙多了幾個文件夾 瀏覽:171
貴州花溪門票優惠app哪個好 瀏覽:803
如何說話不會讓人有被命令的感覺 瀏覽:440
哪裡可下載湘工惠app 瀏覽:265
福特python 瀏覽:312
pdf轉換成word表格 瀏覽:353
無線遠端伺服器無響應是什麼意思 瀏覽:672