日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Java程序和MySQL数据库中关于小数的保存问题

發(fā)布時(shí)間:2023/12/3 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java程序和MySQL数据库中关于小数的保存问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • MySQL 中的小數(shù)類型
    • decimal
    • double
    • float
  • Java 中的小數(shù)類型
    • float
    • double
    • BigDecimal
  • 金額的計(jì)算

MySQL 中的小數(shù)類型

decimal

MySQL 使用 decimal 保存高精度的小數(shù),可以設(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中,語法 decimal(m) 等價(jià)于 decimal(m,0)。同樣,語法 decimal 等價(jià)于 decimal(m,0),可以通過計(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ù)超過指定的標(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ò)。

double

salary double(7,4)

在該例子中,7 是精度,4 是標(biāo)度,精度范圍是 24~53。

MySQL 將 double 視為 double precision(非標(biāo)準(zhǔn)擴(kuò)展)的同義詞。MySQL 還將 real 視為 double precision(非標(biāo)準(zhǔn)擴(kuò)展)的同義詞,除非 SQL服務(wù)器模式包括 REAL_AS_float 選項(xiàng)。

為了保證最大可能的可移植性,需要使用近似數(shù)值數(shù)據(jù)值存儲(chǔ)的代碼應(yīng)使用 float 或 double precision,不規(guī)定精度或位數(shù)。

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

float

float 類型用于表示近似數(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ì)有精度的損失。

Java 中的小數(shù)類型

float

單精度浮點(diǎn)型,含字節(jié)數(shù)為 4,32bit,差不多 7 個(gè)有效位,整數(shù)部分最多 7 位,小數(shù)部分最多 7 位,取值范圍太小,幾乎沒有用

double

雙精度浮點(diǎn)數(shù),含字節(jié)數(shù)為 8,64bit,差不多 15 個(gè)有效位,整數(shù)部分最多 15 位,小數(shù)部分最多 15 位,基本夠用,計(jì)算金錢可以達(dá)到 1 億億以內(nèi)的范圍。

BigDecimal

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

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

金額的計(jì)算

金額需要轉(zhuǎn)成最小單位,例如,1.24 元,需要轉(zhuǎn)換成 124 分,再進(jìn)行計(jì)算,計(jì)算后再轉(zhuǎn)換成元

總結(jié)

以上是生活随笔為你收集整理的Java程序和MySQL数据库中关于小数的保存问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。