欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java和MySQL數(shù)據(jù)庫(kù)中關(guān)于小數(shù)的保存問(wèn)題詳析

 更新時(shí)間:2024年01月03日 09:12:34   作者:鯤志說(shuō)  
在Java和MySQL中小數(shù)的精度可能會(huì)受到限制,如float類型的小數(shù)只能精確到6-7位,double類型也只能精確到15-16位,這篇文章主要給大家介紹了關(guān)于Java和MySQL數(shù)據(jù)庫(kù)中關(guān)于小數(shù)的保存問(wèn)題,需要的朋友可以參考下

前言

之前總結(jié)過(guò)一篇文章mysql數(shù)據(jù)庫(kù)decimal類型與decimal長(zhǎng)度用法詳解,主要是個(gè)人學(xué)習(xí)期間遇到的mysql中關(guān)于decimal字段的詳解,最近在群里遇到一個(gè)小伙伴提出的問(wèn)題,也有部分涉及,今天就再大致總結(jié)一下Java和MySQL數(shù)據(jù)庫(kù)中關(guān)于小數(shù)的保存問(wèn)題

Java 中的小數(shù)類型

在Java中,小數(shù)的表示主要依賴于兩個(gè)基本數(shù)據(jù)類型:float和double。這兩種類型都是浮點(diǎn)類型,但它們?cè)诰群痛鎯?chǔ)空間上有所不同。

float

單精度浮點(diǎn)數(shù),字節(jié)數(shù)為 4,占用32位,整數(shù)部分最多 7 位,小數(shù)部分最多 7 位,取值范圍太小,幾乎沒有用,但通常用于節(jié)省內(nèi)存空間。

double

雙精度浮點(diǎn)數(shù),字節(jié)數(shù)為 8,占用64位,整數(shù)部分最多 15 位,小數(shù)部分最多 15 位,基本夠用,計(jì)算金錢可以達(dá)到1 億億以內(nèi)的范圍;提供更高的精度,但占用更多的內(nèi)存空間。

BigDecimal

比較大的小數(shù)只能使用 BigDecimal 來(lái)接收,MySQL 數(shù)據(jù)庫(kù) decimal 可以保存最多 65 位的小數(shù),但是 double只能接收差不多 15 位的小數(shù)。

數(shù)據(jù)庫(kù)獲取到數(shù)據(jù)需要轉(zhuǎn)換成字符串類型,然后再使用 BigDecimal(String) 構(gòu)造器將數(shù)值封裝成一個(gè) BigDecimal 對(duì)象。

在實(shí)際開發(fā)中,選擇合適的類型要根據(jù)精度和內(nèi)存占用的平衡,以滿足業(yè)務(wù)需求。

MySQL 中的小數(shù)類型

MySQL中提供了多種小數(shù)類型,主要包括FLOAT、DOUBLE、DECIMAL。每種類型都有其獨(dú)特的特點(diǎn)。

1. FLOAT

單精度浮點(diǎn)數(shù),適用于需要較大范圍的數(shù)值,但對(duì)精度要求不高的情況。
用于表示近似數(shù)值數(shù)據(jù)類型。SQL 標(biāo)準(zhǔn)允許在關(guān)鍵字 float 后面的括號(hào)內(nèi)選擇用位指定精度(但不能為指數(shù)范圍)。0 到 23 的精度對(duì)應(yīng) float 列的 4 字節(jié)單精度。

myfloat FLOAT(8,4);

例如上面,定義為 float(8,4) 的一個(gè)列可以顯示為 -9999.9999。MySQL 保存值時(shí)進(jìn)行四舍五入,因此如果在 float(8,4) 列內(nèi)插入 9990.00009,近似結(jié)果是 9990.0001。

??:float 數(shù)據(jù)在運(yùn)算時(shí),如果數(shù)字溢出不會(huì)報(bào)錯(cuò),會(huì)有精度的損失。

2. DOUBLE

雙精度浮點(diǎn)數(shù),提供更高的精度,適用于對(duì)數(shù)值精度要求較高的場(chǎng)景。
可以設(shè)置保留的小數(shù)個(gè)數(shù)。decimal(m,d),表示該值一共顯示 m 位整數(shù),其中 d 位位于小數(shù)點(diǎn)后面。

decimal 和 numeric 類型在 MySQL 中視為相同的類型。它們用于保存必須為確切精度的值,例如貨幣數(shù)據(jù)。當(dāng)聲明該類型的列時(shí),可以(并且通常要)指定精度和標(biāo)度。

例如:

salary decimal(5,2)

在該例子中,5 是精度,2 是標(biāo)度。精度表示保存值的主要位數(shù),標(biāo)度表示小數(shù)點(diǎn)后面可以保存的位數(shù)。

在標(biāo)準(zhǔn)SQL中,語(yǔ)法 decimal(m) 等價(jià)于 decimal(m,0)。同樣,語(yǔ)法 decimal 等價(jià)于vdecimal(m,0),可以通過(guò)計(jì)算確定 m 的值。在MySQL 5.1中支持 decimal 和 numeric 數(shù)據(jù)類型的變量形式。m 默認(rèn)值是 10。

decimal 或 numeric 的最大位數(shù)是 65,但具體的 decimal 或 numeric
列的實(shí)際范圍受具體列的精度或標(biāo)度約束。如果此類列分配的值小數(shù)點(diǎn)后面的位數(shù)超過(guò)指定的標(biāo)度允許的范圍,值被轉(zhuǎn)換為該標(biāo)度。(具體操作與操作系統(tǒng)有關(guān),但一般結(jié)果均被截取到允許的位數(shù))。

注:當(dāng)對(duì) decimal 類型的數(shù)據(jù)進(jìn)行運(yùn)算操作時(shí),如果數(shù)值溢出會(huì)報(bào)錯(cuò)。

3.Float

單精度浮點(diǎn)數(shù),適用于需要較大范圍的數(shù)值,但對(duì)精度要求不高的情況。用于表示近似數(shù)值數(shù)據(jù)類型。
SQL 標(biāo)準(zhǔn)允許在關(guān)鍵字 float后面的括號(hào)內(nèi)選擇用位指定精度(但不能為指數(shù)范圍)。0 到 23 的精度對(duì)應(yīng) float 列的 4 字節(jié)單精度。

例如,定義為 float(7,4) 的一個(gè)列可以顯示為 -999.9999。MySQL 保存值時(shí)進(jìn)行四舍五入,因此如果在 float(7,4) 列內(nèi)插入 999.00009,近似結(jié)果是 999.0001。

注:float 數(shù)據(jù)在運(yùn)算時(shí),如果數(shù)字溢出不會(huì)報(bào)錯(cuò),會(huì)有精度的損失。

對(duì)比分析

1. 精度要求

  • 如果業(yè)務(wù)對(duì)小數(shù)的精度要求較低,且對(duì)內(nèi)存占用有要求,可以選擇使用float。
  • 如果需要更高的精度,但仍然可以容忍一定的舍入誤差,可以選擇使用double。
  • 如果業(yè)務(wù)對(duì)小數(shù)的精度要求非常高,且不能容忍任何誤差,應(yīng)該選擇DECIMAL。

2. 存儲(chǔ)空間

  • float占用4字節(jié),適用于存儲(chǔ)較大范圍的數(shù)值。
  • double占用8字節(jié),提供更高的精度,但占用更多的存儲(chǔ)空間。
  • DECIMAL的存儲(chǔ)空間與精度有關(guān),但通常比double更節(jié)省存儲(chǔ)空間。

3. 舍入誤差

  • 浮點(diǎn)數(shù)(float和double)在進(jìn)行計(jì)算時(shí)可能存在舍入誤差,因?yàn)樗鼈兪腔诙M(jìn)制表示的,而十進(jìn)制小數(shù)無(wú)法精確表示為二進(jìn)制小數(shù)。
  • DECIMAL類型是基于十進(jìn)制的,不會(huì)出現(xiàn)浮點(diǎn)數(shù)的舍入誤差,適用于對(duì)精度要求極高的場(chǎng)景。

總結(jié) 

到此這篇關(guān)于Java和MySQL數(shù)據(jù)庫(kù)中關(guān)于小數(shù)的保存問(wèn)題的文章就介紹到這了,更多相關(guān)Java和MySQL中小數(shù)保存問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)秒表功能

    java實(shí)現(xiàn)秒表功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)秒表功能,利用javax.swing.Timer類設(shè)計(jì)實(shí)現(xiàn)秒表應(yīng)用程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java ThreadPoolExecutor 線程池的使用介紹

    Java ThreadPoolExecutor 線程池的使用介紹

    Executors 是一個(gè)Java中的工具類. 提供工廠方法來(lái)創(chuàng)建不同類型的線程池,這篇文章主要介紹了Java ThreadPoolExecutor 線程池的使用介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java里volatile關(guān)鍵字是什么意思

    Java里volatile關(guān)鍵字是什么意思

    volatile具有synchronized關(guān)鍵字的“可見性”,但是沒有synchronized關(guān)鍵字的“并發(fā)正確性”,也就是說(shuō)不保證線程執(zhí)行的有序性。這篇文章主要介紹了Java里volatile關(guān)鍵字是什么意思的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法

    詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法

    緩存穿透是指緩存和數(shù)據(jù)庫(kù)中都沒有的數(shù)據(jù),而用戶不斷發(fā)起請(qǐng)求,如發(fā)起為id為“-1”的數(shù)據(jù)或id為特別大不存在的數(shù)據(jù)。這時(shí)的用戶很可能是攻擊者,攻擊會(huì)導(dǎo)致數(shù)據(jù)庫(kù)壓力過(guò)大
    2022-01-01
  • 關(guān)于Java兩個(gè)浮點(diǎn)型數(shù)字加減乘除的問(wèn)題

    關(guān)于Java兩個(gè)浮點(diǎn)型數(shù)字加減乘除的問(wèn)題

    由于浮點(diǎn)數(shù)在計(jì)算機(jī)中是以二進(jìn)制表示的,直接進(jìn)行加減乘除運(yùn)算會(huì)出現(xiàn)精度誤差,想要得到精確結(jié)果,應(yīng)使用BigDecimal類進(jìn)行運(yùn)算
    2024-10-10
  • 用java實(shí)現(xiàn)楊輝三角的示例代碼

    用java實(shí)現(xiàn)楊輝三角的示例代碼

    本篇文章主要介紹了用java實(shí)現(xiàn)楊輝三角的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Java中圖片轉(zhuǎn)換為Base64的示例及注意事項(xiàng)

    Java中圖片轉(zhuǎn)換為Base64的示例及注意事項(xiàng)

    本文介紹了Base64編碼的概念及其作用,同時(shí)列舉了在實(shí)現(xiàn)圖片轉(zhuǎn)換為Base64過(guò)程中需要注意的問(wèn)題,包括文件大小、讀取異常、圖片格式、網(wǎng)絡(luò)傳輸效率以及數(shù)據(jù)安全性等,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • 解決rocketmq-client日志保存路徑的問(wèn)題

    解決rocketmq-client日志保存路徑的問(wèn)題

    這篇文章主要介紹了解決rocketmq-client日志保存路徑的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 帶著新人看java虛擬機(jī)01(推薦)

    帶著新人看java虛擬機(jī)01(推薦)

    這篇文章主要介紹了java虛擬機(jī),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java如何實(shí)現(xiàn)樹形查詢

    java如何實(shí)現(xiàn)樹形查詢

    這篇文章主要介紹了java實(shí)現(xiàn)樹形查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論