最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

BigDecimal的toString()、toPlainString()和toEngineeringString()區(qū)別及用法詳解

 更新時(shí)間:2023年08月29日 15:02:00   作者:五月天的尾巴  
使用BigDecimal進(jìn)行打印的時(shí)候,經(jīng)常會(huì)對(duì)BigDecimal提供的三個(gè)toString方法感到好奇,以下整理3個(gè)toString方法的區(qū)別及用法,需要的朋友可以參考下

前言:

使用BigDecimal進(jìn)行打印的時(shí)候,經(jīng)常會(huì)對(duì)BigDecimal提供的三個(gè)toString方法感到好奇,以下整理3個(gè)toString方法的區(qū)別及用法。

方法及含義

以下內(nèi)容介紹java.math.BigDecimal下的三個(gè)toString方法的區(qū)別及用法

toPlainString() : 不使用任何指數(shù)。
toString() :有必要時(shí)使用科學(xué)計(jì)數(shù)法。
toEngineeringString():有必要時(shí)使用工程計(jì)數(shù)法。 工程記數(shù)法是一種工程計(jì)算中經(jīng)常使用的記錄數(shù)字的方法,與科學(xué)技術(shù)法類似,但要求10的冪必須是3的倍數(shù)

不使用指數(shù)科學(xué)記數(shù)法工程記數(shù)法
0.00010.00010.0001
0.00000011E-7100E-9

toString()、toEngineeringString()方法在某些時(shí)候會(huì)使用科學(xué)計(jì)數(shù)法或工程計(jì)數(shù)法,不是所有情況都會(huì)使用科學(xué)計(jì)數(shù)法或工程計(jì)數(shù)法的

對(duì)于一個(gè)數(shù)值可能很小的BigDecimal對(duì)象來(lái)說(shuō),使用toString()可能由于打印的數(shù)值太小而打印其科學(xué)計(jì)數(shù)法表示,而使用toPlainString()才能打印完整的數(shù)值。

import java.math.BigDecimal;
public class Test {
    public static void main(String[] args) {
        BigDecimal bg = new BigDecimal("1E11");
        System.out.println(bg.toString()); // 1E+11
        System.out.println(bg.toPlainString()); // 100000000000
        System.out.println(bg.toEngineeringString()); // 100E+9 
    }
}

執(zhí)行結(jié)果

1E+11
100000000000
100E+9

toString()與科學(xué)計(jì)數(shù)法

toString方法會(huì)將BigDecimal的值以科學(xué)計(jì)數(shù)方式的字符串,但是轉(zhuǎn)換成科學(xué)計(jì)數(shù)的方式也是有場(chǎng)景的,并不是所有的值都會(huì)轉(zhuǎn)為科學(xué)計(jì)數(shù)方式的字符串。

首先,任何一個(gè)BigDecimal都可以使用一個(gè)公式表示:
unscaledValue × 1 0 − s c a l e 10^{-scale} 10−scale

解釋一下:
unscaledValue :整數(shù)非標(biāo)度值 (即去掉小數(shù)點(diǎn)的Bigdecimal的值,類型為BigInteger)
scale:標(biāo)度值,如果為零或正數(shù),則標(biāo)度是小數(shù)點(diǎn)后的位數(shù)。如果為負(fù)數(shù),則將該數(shù)的非標(biāo)度值乘以 10 的負(fù) scale 次冪。
如下,BigDecimal值為123.00,則unscaledValue 為12300,而scale為2,套用公式,則數(shù)值是相等的。

public static void main(String[] args){
   BigDecimal b = new BigDecimal("123.00");
   System.out.println(b.scale());
   System.out.println(b.unscaledValue());
}

執(zhí)行結(jié)果:

2
12300

我們看一下源碼中toString方法中給的example:

在這里插入圖片描述

源碼中toString方法上有很長(zhǎng)的注釋,主要介紹指數(shù)計(jì)算轉(zhuǎn)換過(guò)程,簡(jiǎn)要總結(jié)了兩種toString()方法會(huì)以科學(xué)計(jì)數(shù)方式輸出的場(chǎng)景:
場(chǎng)景一:scale為負(fù)數(shù),一定會(huì)轉(zhuǎn)換為科學(xué)計(jì)數(shù)的方式

public static void main(String[] args) {
    BigDecimal a = new BigDecimal("2340").setScale(-1);
    System.out.println(a.toString());
    System.out.println(a.toPlainString());
    System.out.println(a.scale());
    System.out.println(a.unscaledValue());
}
//執(zhí)行結(jié)果
2.34E+3
2340
-1
234

場(chǎng)景二:
需要先計(jì)算變動(dòng)指數(shù)的值。公式為-scale+(unscaleValue.length-1) ,如果該值小于-6,那么則會(huì)使用科學(xué)計(jì)數(shù)的方式輸出字符串

public static void main(String[] args) {
    //案例一
     BigDecimal b1 = new BigDecimal("0.000000123").setScale(9);
     System.out.println(b1.toString());
     System.out.println(b1.toPlainString());
     System.out.println(b1.scale());
     System.out.println(b1.unscaledValue());
	//輸出結(jié)果為
     1.23E-7
     0.000000123
     9
     123
	//案例二
     BigDecimal b2 = new BigDecimal("0.000001234").setScale(9);
     System.out.println(b2.toString());
     System.out.println(b2.toPlainString());
     System.out.println(b2.scale());
     System.out.println(b2.unscaledValue());
	//輸出結(jié)果為
     0.000001234
     0.000001234
     9
     1234
	//案例三
     BigDecimal b3 = new BigDecimal("0.123000000").setScale(9);
     System.out.println(b3.toString());
     System.out.println(b3.toPlainString());
     System.out.println(b3.scale());
     System.out.println(b3.unscaledValue());
	//輸出結(jié)果為
     0.123000000
     0.123000000
     9
     123000000
	 //案例四
     BigDecimal b4 = new BigDecimal("123000000");
     System.out.println(b4.toString());
     System.out.println(b4.toPlainString());
     System.out.println(b4.scale());
     System.out.println(b4.unscaledValue());
	//輸出結(jié)果為
     123000000
     123000000
     0
     123000000
	//案例五
	//Double d = 12345678d; Double d = 12345678.0; 效果一樣
     Double d = (double) 12345678;
     BigDecimal b5 = BigDecimal.valueOf(d);
     System.out.println(d);
     System.out.println(b5.toString());
     System.out.println(b5.toPlainString());
     System.out.println(b5.scale());
     System.out.println(b5.unscaledValue());
	//輸出結(jié)果為
     1.2345678E7
     12345678
     12345678
     0
     12345678
 }

toEngineeringString()與工程計(jì)數(shù)法

Returns a string representation of this {@code BigDecimal}, using engineering notation if an exponent is needed. 返回此{(lán)@code BigDecimal}的字符串表示形式,如果需要指數(shù),則使用工程符號(hào)(即如果一個(gè)BigDecimal類型的參數(shù)toString()是以指數(shù)形式返回,那么調(diào)用toEngineeringString()則以工程計(jì)數(shù)法返回,工程計(jì)數(shù)法返回的10的冪必須是3的倍數(shù))

toPlainString()

不使用任何指數(shù),原值輸出為字符串

到此這篇關(guān)于BigDecimal的toString()、toPlainString()和toEngineeringString()區(qū)別及用法的文章就介紹到這了,更多相關(guān)BigDecimal的toString() toPlainString()和toEngineeringString()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring Boot Profiles 配置和使用

    詳解Spring Boot Profiles 配置和使用

    本篇文章主要介紹了詳解Spring Boot Profiles 配置和使用,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-06-06
  • Spring?Bean創(chuàng)建流程分析講解

    Spring?Bean創(chuàng)建流程分析講解

    很多時(shí)候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來(lái)選擇是否在容器中加載某個(gè)Bean,這就是Bean的加載控制,一般我們可以通過(guò)編程式或注解式兩種不同的方式來(lái)完成Bean的管理
    2023-01-01
  • 詳解Spring @Autowired 注入小技巧

    詳解Spring @Autowired 注入小技巧

    這篇文章主要介紹了詳解Spring @Autowired 注入小技巧,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Java 無(wú)符號(hào)右移與右移運(yùn)算符的使用介紹

    Java 無(wú)符號(hào)右移與右移運(yùn)算符的使用介紹

    這篇文章主要介紹了Java 無(wú)符號(hào)右移與右移運(yùn)算符的使用介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Spring Cloud Eureka 注冊(cè)與發(fā)現(xiàn)操作步驟詳解

    Spring Cloud Eureka 注冊(cè)與發(fā)現(xiàn)操作步驟詳解

    這篇文章主要介紹了Spring Cloud Eureka 注冊(cè)與發(fā)現(xiàn)操作步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • JavaWeb 入門篇:創(chuàng)建Web項(xiàng)目,Idea配置tomcat

    JavaWeb 入門篇:創(chuàng)建Web項(xiàng)目,Idea配置tomcat

    這篇文章主要介紹了IDEA創(chuàng)建web項(xiàng)目配置Tomcat的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Java讀取xml文件的五種方式

    Java讀取xml文件的五種方式

    在編寫與 XML 數(shù)據(jù)交互的現(xiàn)代軟件應(yīng)用時(shí),有效地讀取和解析 XML 文件是至關(guān)重要的,本文旨在探討 Java 中處理 XML 文件的五種主要方法:DOM、SAX、StAX、JAXB 和 JDOM,我們將詳細(xì)介紹每種方法的工作原理、典型用途以及如何在 Java 程序中實(shí)現(xiàn)它們
    2024-05-05
  • 輕松掌握J(rèn)ava策略模式

    輕松掌握J(rèn)ava策略模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava策略模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java實(shí)現(xiàn)音頻文件播放功能

    java實(shí)現(xiàn)音頻文件播放功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)音頻文件播放功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java詳解線上內(nèi)存暴漲問(wèn)題定位和解決方案

    Java詳解線上內(nèi)存暴漲問(wèn)題定位和解決方案

    本篇文章介紹了我在開發(fā)過(guò)程中遇到的線上內(nèi)存暴漲的問(wèn)題,以及定位問(wèn)題原因和解決該問(wèn)題的過(guò)程及思路,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-10-10

最新評(píng)論

边坝县| 拜城县| 茌平县| 鸡西市| 崇左市| 英德市| 清水河县| 酒泉市| 施秉县| 固安县| 开原市| 太湖县| 新乡县| 邹平县| 峡江县| 沛县| 东至县| 灌南县| 德安县| 四平市| 宁武县| 夏河县| 尚义县| 贞丰县| 鲁山县| 肇源县| 兴隆县| 天全县| 怀化市| 阿拉善右旗| 巴林左旗| 新和县| 津市市| 东阳市| 祁连县| 慈利县| 黎城县| 老河口市| 溆浦县| 山丹县| 彭州市|