導航:首頁 > 編程語言 > java小數精度

java小數精度

發布時間:2023-02-11 22:56:35

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

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

Ⅱ Java中怎麼把除法精確到小數點後100位

JAVA中如何對double或者float的浮點數進行精度計算,
在JAVA中提供了多種參數來實現精度的不同控制方式。
具體例子如下:
package com.soft4j.utility;

import java.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>
*
* @author stephen
* @version 1.0.0
*/
public final class RoundTool {

/**
* 對double數據進行取精度.
* <p>
* For example: <br>
* double value = 100.345678; <br>
* double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br>
* ret為100.3457 <br>
*
* @param value
* double數據.
* @param scale
* 精度位數(保留的小數位數).
* @param roundingMode
* 精度取值方式.
* @return 精度計算後的數據.
*/
public static double round(double value, int scale, int roundingMode) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(scale, roundingMode);
double d = bd.doubleValue();
bd = null;
return d;
}

/**
* 測試用的main方法.
*
* @param argc
* 運行參數.
*/
public static void main(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
}
}
相關文章:

《Double精度的常用設置》
http://henry406.javaeye.com/blog/459669

import java.text.DecimalFormat;
import java.math.BigDecimal;
public class Test_Double{
public static void main(String[] args){
//-----方法1--------四捨五入 round對負數是五舍六入
double d_1 = 123.9;
System.out.println("d_1 = "+Math.round(d_1));
//-------方法2------------------
DecimalFormat decfmt = new DecimalFormat("##0.00");
System.out.println(decfmt.format(1.33482222));
//--------方法3--------------
double x = 1.33345;
java.text.NumberFormat formate = java.text.NumberFormat.getNumberInstance();
formate.setMaximumFractionDigits(3);//設定小數最大為數,那麼顯示的最後會四捨五入的
String m = formate.format(x);
System.out.println(m);
//--------方法4--------------
BigDecimal bd = new BigDecimal(1.234543);
bd = bd.setScale(3,BigDecimal.ROUND_HALF_EVEN);
double d = bd.doubleValue();
System.out.println(d);
//--------取消科學計數法-------------
Double dValue = Double.valueOf("276363652844.8477474");
System.out.println(dValue);
BigDecimal original = new BigDecimal(dValue.doubleValue());
BigDecimal result = original.setScale(2, BigDecimal.ROUND_HALF_DOWN);
String test = result.toString();
System.out.println(test);
}
}

Ⅲ JAVA中小數精度的如何輸出,這裡面為什麼報錯 } }

packagecn.zgn.test;

importjava.util.Random;

publicclassScore{
publicstaticvoidmain(String[]args){
floata;
charb;
Randomnu=newRandom();
a=nu.nextFloat()*100;

if(a>=90){
b='A';
}
else{
if(a>=60){
b='B';
}
else{
b='C';
}
}
System.out.printf("您的成績為:"+String.format("%2.1f",a)+",級別為:"+b);
}
}

-----------------------------------------------------------------------------------------

執行結果截圖:

Ⅳ 關於java單精度與雙精度的問題

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

Ⅳ java 小數變數類型

double和float才能標識小數,其餘的不可以,float便是單精度,double標識雙精度,就是小數位數不同。

Ⅵ JAVA 中除法後小數精度問題

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

Ⅶ java中如何實現將float精確到小數點後兩位

方法1:用Math.round計算,這里返回的數字格式的.

float price=89.89;
int itemNum=3;
float totalPrice=price*itemNum;
float num=(float)(Math.round(totalPrice*100)/100);//如果要求精確4位就*10000然後/10000

方法2:用DecimalFormat 返回的是String格式的.該類對十進制進行全面的封裝.像%號,千分位,小數精度.科學計算.

float price=1.2;
DecimalFormat decimalFormat=new DecimalFormat(".00");//構造方法的字元格式這里如果小數不足2位,會以0補足.
String p=decimalFomat.format(price);//format 返回的是字元串

Ⅷ java中小數模1是多少

在Java中,小數模1的結果是0。具體來講,「模」(求模演算法)是一種用於處理數字的常見方法,可以將任意數字除以模數後所得的余數作為結果。在Java中,當使用模運算時,模的結果必須是介於0和(模數-1)之間的整數。因此,在Java中,如果使用模1來處理任何小數,模1的結果都將是0。

Ⅸ JAVA 中除法後小數精度問題


用double去運算
不然你本來的句子是
double
d
=
3/5;
3/5都是整數
計算起來是0
而你付值給double
就變成了0.0

Ⅹ java中小數屬於什麼類型的數據

小數屬於浮點型(默認為double)。

浮點型代表的是實數,其實就是包含小數的部分。也知道現實世界中是由很多復雜的數據的,所以需要這種表示實數的數據類型的支持。

一、浮點型常量

Java的實常數有兩種表示形式:

  1. 十進制數形式,由數字和小數點組成,且必須有小數點,如0.123, .123, 123. ,123.0 。

  2. 科學計數法形式。如:123e3或123E3,其中e或E之前必須有數字,且e或E後面的指數必須為整數。實常數在機器中佔64位,具有double型的值。對於float型的值,則要在數字後加f或F,如12.3F,它在機器中佔32位,且表示精度較低。

二、浮點型變數

浮點型變數的類型有float和double兩種。

數據類型所佔位數的范圍:

float 32位 3.4e-038~3.4e+038 ;

double 64位 1.7e-308~1.7e+308 ;

雙精度類型double比單精度類型float具有更高的精度,和更大的表示範圍,常常用於科學計算等高精度場合。

三、浮點型變數定義舉例

float f; //指定變數f為float型

double d; //指定變數d為double型

java中沒有無符號型整數,而且明確規定了整型和浮點型數據所佔的內存位元組數,這樣就保證了安全性、魯棒性和平台無關性。

閱讀全文

與java小數精度相關的資料

熱點內容
java仿qq聊天 瀏覽:398
解壓的ipa重新打包 瀏覽:140
程序員那麼可愛vip版 瀏覽:237
程序員怎麼升職 瀏覽:241
圖形化命令按鈕vb 瀏覽:985
vcu盤加密怎麼設置 瀏覽:412
如何加密備份微信聊天記錄 瀏覽:527
安卓手機如何模擬鍵盤 瀏覽:930
查看dns地址命令 瀏覽:767
android錄屏工具 瀏覽:840
成都互動直播系統源碼 瀏覽:955
usb藍牙android 瀏覽:409
伺服器顯示error1什麼意思 瀏覽:710
python代碼精簡 瀏覽:459
文件加密了怎麼找到了 瀏覽:196
jellyfin插件怎麼選擇主伺服器 瀏覽:839
asp用戶注冊源碼 瀏覽:48
什麼是照片壓縮文件 瀏覽:394
java調用js代碼 瀏覽:981
崑山市民app怎麼修改身份信息 瀏覽:779