久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Java BigDecimal 精度避坑指南:從浮點(diǎn)數(shù)誤差到實(shí)戰(zhàn)應(yīng)用

Java BigDecimal 精度避坑指南:從浮點(diǎn)數(shù)誤差到實(shí)戰(zhàn)應(yīng)用 開頭要寫得像有經(jīng)驗(yàn)的Java開發(fā)者在分享經(jīng)驗(yàn)。我做過多個(gè)金融相關(guān)的項(xiàng)目每次接手和金額有關(guān)的模塊都要先看一眼代碼里用的是 double 還是 BigDecimal。這個(gè)習(xí)慣的由來是一次線上事故——一個(gè)賬務(wù)系統(tǒng)用 double 算利息季度結(jié)算時(shí)對(duì)不上賬差了幾分錢排查了一整天最后定位到是浮點(diǎn)數(shù)精度導(dǎo)致的問題。也正是從那次之后我對(duì) BigDecimal 的態(tài)度從會(huì)用變成了研究透。作為 Java 基礎(chǔ)篇里幾乎必考、也幾乎必用的一塊內(nèi)容BigDecimal 是真正考驗(yàn)基本功的知識(shí)點(diǎn)它不復(fù)雜但坑很多。這篇內(nèi)容我從原理講到實(shí)戰(zhàn)把用到過的細(xì)節(jié)、踩過的坑、面試?yán)锍1粏柕降狞c(diǎn)一次性梳理清楚。1. 為什么非用 BigDecimal 不可從 0.10.2 說起1.1 浮點(diǎn)數(shù)精度丟失的根源先做一個(gè)最簡(jiǎn)單、也最經(jīng)典的實(shí)驗(yàn)在你的 IDE 里跑一下這段代碼System.out.println(0.1 0.2); System.out.println(1.0 - 0.9); System.out.println(0.5 * 3);輸出結(jié)果會(huì)讓你懷疑人生0.30000000000000004 0.09999999999999998 1.5前兩行都出現(xiàn)了詭異的尾巴第三行卻正常。原因在于計(jì)算機(jī)底層用二進(jìn)制存儲(chǔ)數(shù)據(jù)而二進(jìn)制并不能精確表示所有十進(jìn)制小數(shù)。0.1 轉(zhuǎn)換成二進(jìn)制后是一個(gè)無限循環(huán)小數(shù)類似于十進(jìn)制里 1/3 無法被有限表示double 只能取其近似值。0.1 0.2時(shí)兩個(gè)近似值相加誤差就疊加暴露出來了。1.5為什么沒問題因?yàn)?0.5 正好等于 2 的負(fù)一次方二進(jìn)制可以精確表示。這也是浮點(diǎn)數(shù)精度問題的核心規(guī)律只有能用 2 的冪次和表示的小數(shù)才是精確的其他都是近似值。1.2 float/double 在業(yè)務(wù)場(chǎng)景中為什么失控如果你只把 float/double 用在科學(xué)計(jì)算或者游戲物理引擎里誤差通常是可接受的。但一旦進(jìn)入業(yè)務(wù)系統(tǒng)情況完全不同金額計(jì)算單價(jià)×數(shù)量得到的價(jià)格用戶會(huì)拿著計(jì)算器和你對(duì)賬任何一分錢的偏差都會(huì)觸發(fā)客訴。統(tǒng)計(jì)報(bào)表百分比、平均值、增長(zhǎng)率連續(xù)運(yùn)算后誤差會(huì)不斷累積放大最后報(bào)表數(shù)據(jù)和數(shù)據(jù)庫(kù)明細(xì)對(duì)不上。計(jì)費(fèi)系統(tǒng)按分鐘計(jì)費(fèi)、按流量計(jì)費(fèi)每筆誤差看起來微小乘以海量用戶就是巨大的資金差異。數(shù)值比較if (balance targetBalance)這種直接等值判斷在浮點(diǎn)數(shù)面前是不可靠的誤差將導(dǎo)致正確業(yè)務(wù)被誤判。在這些場(chǎng)景里需要的是一個(gè)能精確表示小數(shù)并且可控舍入的類型。Java 給出的標(biāo)準(zhǔn)答案就是 BigDecimal。它的思路很直接不采用二進(jìn)制近似表示而是用一個(gè)大整數(shù)unscaled value加上一個(gè)小數(shù)位刻度scale完整還原出十進(jìn)制數(shù)值。0.1在 BigDecimal 里被存成整數(shù)1和刻度1本質(zhì)含義是1 × 10?1這是精確的。一句話總結(jié)凡是和錢、比例、精確計(jì)算有關(guān)的場(chǎng)景放棄原生浮點(diǎn)類型統(tǒng)一上 BigDecimal。2. 構(gòu)造 BigDecimal一半的坑集中在這里2.1 三種構(gòu)造方式對(duì)比BigDecimal 提供了多種構(gòu)造方式選擇哪一種是最容易踩坑的地方。先看這段真實(shí)的坑BigDecimal a new BigDecimal(0.1); System.out.println(a); // 輸出0.1000000000000000055511151231257827021181583404541015625有沒有發(fā)現(xiàn)問題明明寫的是0.1得到的卻不是 0.1。原因在于new BigDecimal(double)接收的是 double 的二進(jìn)制近似值然后把這個(gè)近似值如實(shí)轉(zhuǎn)換為 BigDecimal。double 表示的 0.1 本身就是那個(gè)一長(zhǎng)串尾巴的近似值于是結(jié)果就污染了。而換成字符串構(gòu)造結(jié)果立刻清爽BigDecimal b new BigDecimal(0.1); System.out.println(b); // 輸出0.1字符串構(gòu)造會(huì)嚴(yán)格按照字符串的內(nèi)容解析得到精確的十進(jìn)制結(jié)果。所以業(yè)界有一條鐵律不要用 new BigDecimal(double構(gòu)造優(yōu)先使用 new BigDecimal(String或 BigDecimal.valueOf()。那BigDecimal.valueOf(0.1)為什么也是安全的看一下源碼就不難理解public static BigDecimal valueOf(double val) { return new BigDecimal(Double.toString(val)); }valueOf內(nèi)部先把 double 轉(zhuǎn)成字符串再走字符串構(gòu)造路徑所以繞開了二進(jìn)制近似值的陷阱。這實(shí)際上就是官方幫你封了一層安全轉(zhuǎn)換。我把三種方式整理成一個(gè)對(duì)比表方便記憶構(gòu)造方式示例結(jié)果安全性new BigDecimal(double)new BigDecimal(0.1)0.1000000000000000055511151231257827021181583404541015625不安全new BigDecimal(String)new BigDecimal(0.1)0.1安全BigDecimal.valueOf(double)BigDecimal.valueOf(0.1)0.1安全2.2 從源碼理解 BigDecimal 的內(nèi)部結(jié)構(gòu)理解 BigDecimal 的精度機(jī)制關(guān)鍵在于它內(nèi)部的兩個(gè)核心字段intVal或者 Java 高版本中直接使用BigInteger表示未縮放值和scale。用公式表示就是BigDecimal 數(shù)值 unscaledValue × 10^(-scale)舉個(gè)例子new BigDecimal(123.45)中unscaledValue 是整數(shù)12345scale 是2也就是12345 × 10?2。new BigDecimal(0.1)則是1 × 10?1。這套設(shè)計(jì)讓任意十進(jìn)制小數(shù)都能被精確表示不再依賴二進(jìn)制近似。這也解釋了為什么equals方法會(huì)比較 scale兩個(gè)數(shù)值相同但 scale 不同的 BigDecimal在你眼里可能是同一個(gè)數(shù)在它自己看來身份不同。比如1.0是10 × 10?11.00是100 × 10?2數(shù)值相等但內(nèi)部表示不同。這個(gè)細(xì)節(jié)極其重要后面我會(huì)單獨(dú)展開講。從 JDK 9 開始 BigDecimal 的內(nèi)部實(shí)現(xiàn)做過升級(jí)核心存儲(chǔ)換成了BigInteger但對(duì)外行為和概念模型不變。理解unscaledValue scale這套模型就理解了 BigDecimal 的一切行為。3. 加減乘除與舍入規(guī)則業(yè)務(wù)里 90% 的操作在這里3.1 add/subtract/multiply 基本用法與鏈?zhǔn)秸{(diào)用BigDecimal 的加減乘操作接口非常直觀分別是add、subtract、multiply。關(guān)鍵要養(yǎng)成一個(gè)習(xí)慣每次運(yùn)算都要接收返回值因?yàn)樗且粋€(gè)不可變對(duì)象運(yùn)算結(jié)果不會(huì)修改調(diào)用者本身而是返回一個(gè)新對(duì)象。BigDecimal price new BigDecimal(19.9); BigDecimal count new BigDecimal(3); BigDecimal total price.multiply(count); System.out.println(total); // 輸出59.7 BigDecimal taxRate new BigDecimal(0.06); BigDecimal tax total.multiply(taxRate).setScale(2, RoundingMode.HALF_UP); System.out.println(tax); // 輸出3.58第二行里我用了鏈?zhǔn)秸{(diào)用multiply(taxRate)返回一個(gè)新 BigDecimal再繼續(xù)調(diào)用setScale。這種寫法在工作中很常見要注意順序別亂。好多初學(xué)者寫鏈?zhǔn)秸{(diào)用時(shí)會(huì)忘掉中間結(jié)果沒有接收導(dǎo)致后面取到的還是舊對(duì)象排查半天才發(fā)現(xiàn)是這回事。對(duì)于加法減法用法完全對(duì)稱。特別提醒一點(diǎn)如果要對(duì)金額做累加比如統(tǒng)計(jì)一批訂單的總金額推薦先初始化一個(gè)BigDecimal.ZERO然后循環(huán)往里面加BigDecimal sum BigDecimal.ZERO; for (Order order : orderList) { sum sum.add(order.getAmount()); }注意每一輪都要重新賦值給sum這是不可變對(duì)象的使用常識(shí)。有人會(huì)寫sum.add(order.getAmount())然后不接收循環(huán)結(jié)束后 sum 仍然是零這個(gè) bug 非常隱蔽。3.2 divide 的兩種形態(tài)與除不盡的異常除法是整個(gè) BigDecimal 中最容易出問題的操作尤其是不指定精度時(shí)。看這個(gè)例子BigDecimal one new BigDecimal(1); BigDecimal three new BigDecimal(3); System.out.println(one.divide(three));運(yùn)行后直接拋出ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.因?yàn)?1 ÷ 3 的結(jié)果是無限循環(huán)小數(shù)BigDecimal 不知道你想保留多少位也不知道怎么舍入只能拋異常結(jié)束。解決方式是指定精度和舍入模式兩個(gè)參數(shù)幾乎是綁定出現(xiàn)的BigDecimal result one.divide(three, 4, RoundingMode.HALF_UP); System.out.println(result); // 輸出0.3333這個(gè)例子中4表示保留 4 位小數(shù)RoundingMode.HALF_UP表示四舍五入。Java 里除法的一個(gè)常見報(bào)錯(cuò)就是除不盡拋異常凡是代碼里出現(xiàn)divide的地方都應(yīng)該習(xí)慣性帶上 scale 和 RoundingMode。3.3 setScale 與七種舍入模式setScale是控制 BigDecimal 小數(shù)位數(shù)的核心方法。它有兩種常見形態(tài)bigDecimal.setScale(2); // 不指定舍入模式遇到無法精確表示時(shí)可能拋異常 bigDecimal.setScale(2, RoundingMode.HALF_UP); // 推薦指定舍入模式Java 8 開始RoundingMode取代了老的常量提供了 7 種模式。我把每種模式結(jié)合實(shí)際數(shù)值說明白這樣你以后選型心里有數(shù)。舍入模式對(duì)正數(shù)的行為對(duì)負(fù)數(shù)的行為典型使用場(chǎng)景UP遠(yuǎn)離零方向舍入1.1→2遠(yuǎn)離零-1.1→-2極少用向上取整的場(chǎng)景DOWN趨向零舍入1.9→1趨向零-1.9→-1直接截?cái)嘈?shù)位CEILING向正無窮大方向1.1→2向正無窮大-1.1→-1結(jié)果不允許小于真實(shí)值FLOOR向負(fù)無窮大方向1.9→1向負(fù)無窮大-1.1→-2結(jié)果不允許大于真實(shí)值HALF_UP四舍五入2.5→3四舍五入-2.5→-3業(yè)務(wù)中最常用HALF_DOWN五舍六入2.5→2五舍六入-2.5→-2少見HALF_EVEN銀行家舍入2.5→23.5→4同左統(tǒng)計(jì)、金融算法中有時(shí)會(huì)用到業(yè)務(wù)系統(tǒng)里最常用的是HALF_UP理解起來就是小學(xué)學(xué)的四舍五入。HALF_EVEN銀行家舍入在金融統(tǒng)計(jì)中會(huì)用到它的原則是五入成雙當(dāng)數(shù)字正好處于中間值比如 2.5時(shí)舍入到相鄰的偶數(shù)目的是讓多次舍入產(chǎn)生的統(tǒng)計(jì)偏差趨于平衡。但普通計(jì)費(fèi)場(chǎng)景不需要這種高級(jí)策略HALF_UP是最穩(wěn)的選擇。注意setScale不止能縮小小數(shù)位數(shù)還能擴(kuò)大。比如new BigDecimal(3.1).setScale(3, RoundingMode.HALF_UP)的結(jié)果是3.100這個(gè)特性在需要對(duì)齊小數(shù)位做比較時(shí)很實(shí)用。4. 比較大小用 compareTo別用 equals4.1 equals 的 scale 陷阱接前面提到的內(nèi)部結(jié)構(gòu)來看一個(gè)讓人猝不及防的比較問題BigDecimal a new BigDecimal(1.0); BigDecimal b new BigDecimal(1.00); System.out.println(a.equals(b)); // false System.out.println(a.compareTo(b) 0); // true數(shù)學(xué)上完全相等的兩個(gè)數(shù)equals卻返回 false。因?yàn)閑quals不僅比較數(shù)值還比較 scale。1.0的 scale 是 11.00的 scale 是 2內(nèi)部結(jié)構(gòu)不同結(jié)果就是 false。這是 BigDecimal 里最經(jīng)典的隱形坑之一。如果代碼里用equals判斷金額或者價(jià)格相等一旦兩個(gè)值的精度位數(shù)不一致即使數(shù)值相同也會(huì)被判為不同。我見過有人用數(shù)據(jù)庫(kù)查出一個(gè)1.00代碼里寫死1.0equals永遠(yuǎn)返回 false導(dǎo)致業(yè)務(wù)分支走錯(cuò)。排查了很久才發(fā)現(xiàn)問題出在 scale 上。4.2 正確比較姿勢(shì)與排序應(yīng)用正確判斷數(shù)值大小的方式是compareTo它只比較數(shù)值本身忽略 scale 差異System.out.println(a.compareTo(b)); // 0表示相等 System.out.println(a.compareTo(new BigDecimal(2))); // -1表示小于 System.out.println(a.compareTo(new BigDecimal(0.5))); // 1表示大于compareTo的返回值語義和 Comparable 接口一致負(fù)數(shù)表示小于0 表示等于正數(shù)表示大于。這也讓 BigDecimal 天然支持排序。實(shí)際工作中常見的場(chǎng)景是列表按金額排序ListBigDecimal amounts Arrays.asList( new BigDecimal(39.90), new BigDecimal(129.00), new BigDecimal(9.90) ); amounts.sort(BigDecimal::compareTo); System.out.println(amounts); // 輸出[9.9, 39.90, 129.00]如果要在HashMap或HashSet里用 BigDecimal 當(dāng) key同樣要注意equals和hashCode是配套的。既然equals會(huì)對(duì)1.0和1.00返回 false那么它們?cè)?HashMap 中也會(huì)被當(dāng)作兩個(gè) key。如果業(yè)務(wù)上希望數(shù)值相等就視為相同 key最好統(tǒng)一精度后再入 Map或者用TreeMap配合compareTo來規(guī)避。4.3 判斷零值的正確姿勢(shì)判斷一個(gè) BigDecimal 是否為零很多人順手寫bigDecimal.equals(BigDecimal.ZERO)這又會(huì)踩到 scale 的坑。0.00在 equals 眼里和0不是同一個(gè)對(duì)象但業(yè)務(wù)上它們就是零。推薦兩種寫法bigDecimal.compareTo(BigDecimal.ZERO) 0; // 或者 bigDecimal.signum() 0;signum()方法返回 -1、0、1 三種狀態(tài)表示負(fù)數(shù)、零、正數(shù)效率高且沒有 scale 問題。在判斷大于 0 時(shí)signum() 0也是一個(gè)很清晰的寫法。5. 格式化輸出與類型轉(zhuǎn)換toString 也可能出問題5.1 科學(xué)計(jì)數(shù)法帶來的顯示問題BigDecimal 在數(shù)值特別大或特別小時(shí)toString()會(huì)采用科學(xué)計(jì)數(shù)法展示。看這個(gè)例子BigDecimal number new BigDecimal(1E10); System.out.println(number.toString()); // 輸出1E10如果直接把這個(gè)結(jié)果拼進(jìn)短信、郵件、報(bào)表或者傳給前端展示會(huì)出現(xiàn)1E10這種讓人摸不著頭腦的顯示。正確做法是使用toPlainString()System.out.println(number.toPlainString()); // 輸出10000000000toPlainString()返回的永遠(yuǎn)是不帶科學(xué)計(jì)數(shù)法的普通十進(jìn)制字符串。凡是要把 BigDecimal 展示給用戶或?qū)懭霕I(yè)務(wù)單據(jù)我都統(tǒng)一走toPlainString()這是一個(gè)成本極低但收益很大的習(xí)慣。5.2 金額格式化與小數(shù)位對(duì)齊業(yè)務(wù)中最常見的格式化需求是保留兩位小數(shù)并加千分位。通常會(huì)配合DecimalFormat完成需要注意先設(shè)置好 BigDecimal 的精度再做格式化避免格式化階段引入意外BigDecimal amount new BigDecimal(12345678.9); DecimalFormat df new DecimalFormat(#,##0.00); System.out.println(df.format(amount)); // 輸出12,345,678.90有一個(gè)細(xì)節(jié)容易被忽視DecimalFormat默認(rèn)使用的舍入模式是HALF_EVEN不是HALF_UP。如果業(yè)務(wù)明確要求四舍五入必須手動(dòng)指定df.setRoundingMode(RoundingMode.HALF_UP);不設(shè)置的話2.5會(huì)被格式化成2而不是3這種問題隱蔽性特別強(qiáng)通常要到最后的數(shù)據(jù)核對(duì)階段才會(huì)暴露。另外一個(gè)處理方式是從 BigDecimal 層面先完成精度控制再用字符串拼接這樣每一步都有明確邊界BigDecimal rounded amount.setScale(2, RoundingMode.HALF_UP); String result String.format(%,.2f, rounded);開發(fā)時(shí)也要避免讓 BigDecimal 繞道 double 去做格式化比如String.format(%.2f, bigDecimal.doubleValue())。這種寫法把 BigDecimal 轉(zhuǎn)換成了 double精度在轉(zhuǎn)換過程中就已經(jīng)丟失了格式化再好看都沒有意義。6. 項(xiàng)目實(shí)戰(zhàn)從工具類封裝到踩坑記錄6.1 我在項(xiàng)目中沉淀的 BigDecimal 工具類因?yàn)?BigDecimal 在代碼里出鏡率太高我習(xí)慣在項(xiàng)目里沉淀一個(gè)工具類把兜底邏輯集中管理。核心功能是安全轉(zhuǎn)換和空值兜底。下面是一個(gè)很實(shí)用的模板你直接可以拿去改改用public final class BigDecimalUtils { private BigDecimalUtils() { } public static BigDecimal toBigDecimal(Object value) { return toBigDecimal(value, BigDecimal.ZERO); } public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) { if (value null) { return defaultValue; } if (value instanceof BigDecimal) { return (BigDecimal) value; } if (value instanceof Number) { return BigDecimal.valueOf(((Number) value).doubleValue()); } try { return new BigDecimal(value.toString().trim()); } catch (NumberFormatException e) { return defaultValue; } } public static BigDecimal toBigDecimalQuietly(String text, BigDecimal defaultValue) { if (text null || text.trim().isEmpty()) { return defaultValue; } try { return new BigDecimal(text.trim()); } catch (NumberFormatException e) { return defaultValue; } } public static boolean isPositive(BigDecimal value) { return value ! null value.signum() 0; } public static boolean isZero(BigDecimal value) { return value null || value.signum() 0; } public static BigDecimal scaleTo2(BigDecimal value) { return value.setScale(2, RoundingMode.HALF_UP); } public static BigDecimal divide(BigDecimal dividend, BigDecimal divisor) { return dividend.divide(divisor, 2, RoundingMode.HALF_UP); } }這個(gè)工具類里有兩個(gè)設(shè)計(jì)要點(diǎn)。第一toBigDecimal對(duì)參數(shù)是Number的情況使用BigDecimal.valueOf而不是直接強(qiáng)轉(zhuǎn)確保精度安全。第二所有轉(zhuǎn)換失敗的情況都返回默認(rèn)值避免調(diào)用方到處寫判空邏輯??罩羔樖?BigDecimal 使用中最常見的運(yùn)行時(shí)異常所以判空和兜底要前置到工具層。6.2 實(shí)際項(xiàng)目中踩過的三個(gè)典型坑我把自己在真實(shí)項(xiàng)目中遇到的三個(gè)問題記錄在這里每一個(gè)都對(duì)應(yīng)一段痛苦的排查經(jīng)歷。第一個(gè)坑是數(shù)據(jù)庫(kù)字段類型與 BigDecimal 的映射問題。MySQL 的decimal類型映射到 Java 的 BigDecimal 后scale 取決于表結(jié)構(gòu)的定義。如果數(shù)據(jù)庫(kù)字段是decimal(10, 2)查出來就是兩位小數(shù)如果字段是decimal(10, 4)查出來是四位小數(shù)。代碼里如果假設(shè)查出來的一定是兩位小數(shù)直接做展示會(huì)出現(xiàn)19.9000這種尾巴必須統(tǒng)一用工具類做setScale(2)。第二個(gè)坑是JSON 序列化與反序列化的精度丟失。早期項(xiàng)目用 Fastjson 或 Gson 時(shí)如果沒有注冊(cè)針對(duì) BigDecimal 的序列化器反序列化過程可能先把 JSON 中的數(shù)值轉(zhuǎn)成 double再轉(zhuǎn)成 BigDecimal精度直接受損。一個(gè)保底方案是JSON 里金額字段統(tǒng)一用字符串類型傳輸Java 側(cè)接收為 String 再做轉(zhuǎn)換徹底繞開中間態(tài)。如果用 Jackson也可以配置把 BigDecimal 序列化為字符串保證傳輸過程中不被 JS 精度問題二次傷害。第三個(gè)坑是在循環(huán)里頻繁創(chuàng)建 BigDecimal 對(duì)象導(dǎo)致性能問題。BigDecimal 是不可變對(duì)象每次運(yùn)算都會(huì)產(chǎn)生新對(duì)象在循環(huán)里如果每次創(chuàng)建新對(duì)象而不復(fù)用GC 壓力會(huì)明顯上升。比如在百萬級(jí)數(shù)據(jù)量下計(jì)算平均值先把所有值累加為 BigDecimal再做一次除法而不是每筆數(shù)據(jù)都做一次除法。對(duì)于性能敏感的場(chǎng)景要評(píng)估是否可以用 long 以分為單位存儲(chǔ)金額讓計(jì)算發(fā)生在整數(shù)域里最后除以 100 轉(zhuǎn) BigDecimal犧牲一點(diǎn)代碼直觀性換取極高效率。6.3 不可變性的正確理解BigDecimal 是不可變對(duì)象這一點(diǎn)在 Java 里和 String 完全一致。任何add、subtract、multiply、divide、setScale操作都不會(huì)修改原對(duì)象而是返回一個(gè)新對(duì)象。理解不可變性對(duì)編寫正確代碼非常重要BigDecimal a new BigDecimal(10); BigDecimal b a.add(new BigDecimal(5)); System.out.println(a); // 10a 沒有變 System.out.println(b); // 15如果你需要的是修改后的結(jié)果必須接收返回值。這個(gè)特性也讓 BigDecimal 天然線程安全因?yàn)樗鼪]有內(nèi)部狀態(tài)可以被修改。多個(gè)線程共享同一個(gè) BigDecimal 實(shí)例時(shí)不需要額外的同步處理。這在并發(fā)編程里是一個(gè)加分項(xiàng)面試時(shí)經(jīng)常被問到BigDecimal 是線程安全的嗎答案就是它是不可變對(duì)象所以是線程安全的。7. 面試官視角的 BigDecimal 高頻問題7.1 六個(gè)??紗栴}及回答要點(diǎn)我參與過不少技術(shù)面試也問過候選人 BigDecimal 相關(guān)的問題。整理幾個(gè)高頻問題列出我認(rèn)為合理的回答要點(diǎn)。問題一為什么不能用 float 或 double 表示金額回答要點(diǎn)float/double 采用二進(jìn)制近似表示十進(jìn)制小數(shù)很多小數(shù)無法精確表達(dá)運(yùn)算會(huì)產(chǎn)生誤差在金額計(jì)算中可能導(dǎo)致對(duì)不上賬。BigDecimal 采用unscaledValue × 10^(-scale)的方式精確表示十進(jìn)制數(shù)值可以滿足精度要求。問題二new BigDecimal(0.1)和new BigDecimal(0.1)有什么區(qū)別回答要點(diǎn)前者接收 double 的二進(jìn)制近似值并如實(shí)轉(zhuǎn)換結(jié)果是一長(zhǎng)串精度污染后的數(shù)值后者按字符串內(nèi)容精確解析得到0.1。線上代碼必須用字符串構(gòu)造或BigDecimal.valueOf。問題三兩個(gè) BigDecimal 比較相等用什么回答要點(diǎn)compareTo忽略 scale比較的是數(shù)值本身equals會(huì)同時(shí)比較 scale。業(yè)務(wù)上判斷金額相等應(yīng)該使用compareTo 0或者用signum() 0判斷是否為零。問題四BigDecimal 除法拋 ArithmeticException 是什么原因如何處理回答要點(diǎn)不指定舍入模式時(shí)如果除不盡結(jié)果是一個(gè)無限循環(huán)小數(shù)BigDecimal 無法確定保留位數(shù)就拋異常。處理方式是指定帶的scale和RoundingMode如divide(divisor, 2, RoundingMode.HALF_UP)。問題五BigDecimal 是線程安全的嗎回答要點(diǎn)BigDecimal 是不可變對(duì)象所有運(yùn)算都會(huì)返回新對(duì)象不會(huì)修改內(nèi)部狀態(tài)所以在多線程環(huán)境下可以安全共享。這與 String 的設(shè)計(jì)類似。問題六1.0和1.00用 equals 比較結(jié)果是什么為什么回答要點(diǎn)結(jié)果是 false。equals不僅比較數(shù)值還比較 scale。1.0的 scale 為 11.00的 scale 為 2內(nèi)部表示的 unscaledValue 不同。這是 BigDecimal 最容易踩坑的細(xì)節(jié)之一。7.2 回答面試題的小技巧面試中回答 BigDecimal 問題時(shí)除了正確性展示你對(duì)原理的理解會(huì)加分。比如被問到為什么 0.1 0.2 不等于 0.3比起直接說 float 有精度問題更好的回答是先說明二進(jìn)制表示十進(jìn)制小數(shù)的局限性再講 BigDecimal 的實(shí)現(xiàn)原理最后補(bǔ)一句實(shí)際開發(fā)中的最佳實(shí)踐字符串構(gòu)造、compareTo 比較、divide 帶舍入模式。這樣從原理到實(shí)踐都覆蓋了面試官能立刻感受到你的經(jīng)驗(yàn)深度。如果被問到工具類設(shè)計(jì)這類開放性問題可以把前面那個(gè)BigDecimalUtils的思路講出來判空兜底、統(tǒng)一精度、安全除法。這種問題沒有標(biāo)準(zhǔn)答案考察的是編碼習(xí)慣和工程意識(shí)能說出這幾個(gè)維度就說明你在真實(shí)項(xiàng)目里是思考過的。寫在最后的心得BigDecimal 用起來不難但做到零坑需要把原理和邊界都摸透。我個(gè)人的習(xí)慣是金額字段一律 BigDecimal構(gòu)造優(yōu)先用字符串或valueOf比較統(tǒng)一用compareTo除法必須帶精度和舍入模式對(duì)外展示用toPlainString。這些習(xí)慣看起來瑣碎但就是它們攔住了一次又一次的線上事故。最后提醒一點(diǎn)不要在一個(gè)項(xiàng)目里混用 BigDecimal 的多種構(gòu)造方式。定好規(guī)范、寫在團(tuán)隊(duì)開發(fā)手冊(cè)里、讓每個(gè)新人都從規(guī)范開始寫比等到線上出了精度預(yù)警再回頭收拾要省太多力氣。Java 基礎(chǔ)的東西就是這樣——越基礎(chǔ)越重要越重要越值得提前研究透。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91一起操| 五月天人妻综合| 五月天亚洲网| 久久五月婷| 大JI巴好深好爽又大又粗视频| 啊啊啊用力在线观看| 日韩性爱小视频| www.男人天堂| 爱爱60秒免费视频| 中文字幕乱在线伦视频中文字幕乱码在线 | 91碰超| 97亚洲自在精品在线观看| 丁香六月综合激情| 国产一区二区三区免费视频在性观看 | 男人的天堂2019AV| 久操网无码在线| 激情欧美97| 亚洲人精品久久久喷水| 国产精品亚洲免费| 国产对白刺激视频| 久久精品成人一区二区三区蜜臀| 91色艳| 在线观看岛国有码| 天天澡天天爽日日AV| 十八禁一区二区无码观看| 夜夜肏2021| av绯色| 亚洲无线观看久久| 综合少妇网| 东北操逼| 蜜桃色院一区久久 | 九九99精品视频在线观看| 东京热一区二区中文字幕| www.91欧美| 亚洲 日韩 欧美 国产综合体| 欧美一级久久久久久久大片动画 | 欧美精品庄| 九九久久久久久爱| 丁香五月天婷婷姐| 96AV精品| 天美传媒一二三区永久网站| 欧亚综合一卡二卡中文字幕| 夜夜中出国产| 91人妻视频| 亚洲精品骚逼| 免费久久9999| 九九九九九九九九九九九九九九九女| 亚洲欧美综合色| 殴美性色a级欧美| 亚洲精品乱码久久久久久蜜桃麻豆| 天天射天天操天天干天天吃2018 | 国产一区在线观看无码AV| 99婷婷一区二区| 亚洲黄片免费在线播放| 333kkkk·亚洲com久久| 综合久久欧美| 日本三级人妻a人妻一在线| 国产视频三区四区| 成人小电影网站tex| 亚洲图片小说欧洲| 久久久久久电影| 精品无码不卡视频| 99热这里只有精品地址| 国产久久视频| 国产精品九九| 东京热双插| 欧美人与动性人交a| 国产亚洲中文不卡二区| 久久伊人五月天| 77777亚洲蜜臀精品久久综合蜜臀| 亚州色交| 很很操在线| 国产91啪| 69人妻精品丰满熟女区| 国产激情在线| 人人人人人人少妇| 韩国国产欧美情侣视频在线| 亚洲精品国产拍免费91在线| 大黄片做爱的大的| 99热97| 99久久9| 精品国产乱码久久久久久网站入口| 久久精品国产亚洲AV清纯| 日韩 欧美 视频 在线 一区| 久久极品伊人| 91 国产丝袜在线播放-百度| 久久精品久久久久久久久| 欧美特大黄一级片片免费| 亚洲国产精品久久久久婷婷青年| 天天综合网合集91| 操比国产| 国产精品视频| 很很操在线| 99免费在线视频| 人妻黑丝袜电影| 操国产逼| 欧美日韩免费专区在线| 日韩一级二级三级| 激情五月天婷婷| 裸体1区| 男女性无套 免费九一| 可以免费观看的日韩av毛片| 日日夜夜草草草| 国产精品久久久久久久久久久久久久| 日本在线不卡v二区| 日本超碰97日韩精品人妻| 亚洲高清欧美总合| 久操不卡视频| 欧美女同在线| 亚洲一区二区性爱电影| 九九九九免费视频| 男人夜色天堂ss| 嫩草黄页| 亚洲成人性爱在线观看| 偷拍综合亚洲| 日本色色色视频| 久久精品国产99国产精品亚洲| 神马久久久久久| 成 人 影视 一区 二区 三区 四区| 亚洲色棕合| 国产成人www免费人成看片| 影音先锋一区二区在线资源| 91亚洲色人| 精产国品一区二三产品| 国产AV色黄看到爽| 亚拍在线| 91色色色| 久久久日本电影| 91无码中出人妻视频| 一二三区精品视频| 曰韩欧美国产传媒麻豆第一区| 99热这里只有精品1| 欧美黄片视频在线观看免费| 国产精品久久天天干| 春色校园综合网| 丰满人妻aA一区二区三区| 亚洲国男人的天堂| 嫩呦国产一区二区三区AV| 丁香婷婷激情五月天无毒不卡 | 嫩草 我啊~嗯~在线| 最新日产中文在线麻豆| 欧美高清16| 香蕉在线一区二区三区| 精品人体无圣光凹凸| 91少妇通奸网站| 秋霞一级视频在线观看免费| 日韩亚洲欧美中文字幕| 男人天堂综合| 发朗少妇买婬全视频中文| 91色宗合| 91爱欧美| 久久色人体| 国产Av超碰| 国产成人精品午夜福利| 99热网站| 国产精品无码论坛| 天天干人人看综合| 国产视频大全| 992这里有精品| 性爱边摸边日免费AV| 欧美色亚洲色| 九九成人精品| 伊人影院中文字幕| 国产精品无码在线| 日本色色色网站免费看不卡| 玖玖资源视频一区二区三区| 亚洲国产综合久久久性感熟妇| 国产久久成人| 亚洲男人天堂AV| 东京热熟女亚洲视频网站| 秋霞一级视频在线观看免费| www.色吧5.com| 天堂亚洲精品| 男人精品天堂一区| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 无码操逼天堂| 久久9亚洲| 国产av美女被艹的乱叫| 黄色激情电影在线观看| 女人综合网| 玖玖大干人妻| 亚热日本熟女| 97中文字幕色| 亚洲最大黄网| 激情文学网伊人| 不卡一区二区日本视频| 1769一区| 精品国产av一区二区三区四区入口 | 亚洲加勒比久久日本道| 九九九网站| 国产人人干| 干b在线性社区| 亚洲精品丝袜-不卡成人免费……| 波多野结衣一级视频| 国产极品馒头逼| 国产美女91| 蜜乳av一区二区三区四区不卡| 日韩一999精品| 熟妇一区,二区,三区。| 天天草AV| 五月天亚洲网| 久久亚洲天堂| 97操综合| 色哟哟av| 亚州男人天堂| 伊人热综合| se..亚洲欧美| 日本一区不卡| 日韩免费一级性爱视频| 人人爱人人乐人人操| 少妇淫妇久久久久久久| 91精品人妻一品二品三品| 欧美丝袜亚洲| 久久久久久久久久久久97| 日本三级久| 国产一国产一级毛片古装| 91丝袜人妻| 日韩av女优在线免费一区| 国产AV激情无码久久无码| 大香焦A片| 久久精品 六十路 熟女 欧美| 超碰97综合| 精人妻一区二区三区| chaopen97久久| 日韩三级性| 久久是精品| av2014 日韩在线中文字幕| 国产精品高朝久久久久久久| 久9综合在线| 欧美丝袜中文字幕07在线| 日韩在线电影| 日本伦乱九九九综合| 91精品人妻偷情| 欧美一级AAAAAAA| 久久精品人人做人人看| 99视频在线| 天天综合91| 放黄片放3级黄片没穿衣服| 久久久精品| 日韩免费三级黄片电影| 另类天堂| 青青草久久一区网| 老熟妇一区二区三区| 97超碰超| 国产野战露脸在线播放| 91色女| 欧美色图成人网一区二区 | 在线色资源| AV色五月| 91综合色噜噜| 日本在线播放不卡一区| 中文啪啪视频| 加勒比东京热五月天天堂网| v91av| 国产操逼视频在线观看| 色色色色综合网| 无码欧美有限公司| 欧美性性性| 国产精品日韩在线一区| 国产精品亚洲免费| 日B操| 老女人碰碰在线碰碰视频| 五月天亚洲网| 无码久久国产 | 亚洲AV乱码专区国产噜噜亚洲 | 99久久精品国产系列| 啊嗯嗯啊好大好爽| 综合伊人网12色| 人妻乱仑一区二区三区| 超碰97男人| 大香蕉狠狠爱| 日韩成人大片在线观看| 欧洲一区二区三区免费| 麻豆久久精品亚洲精品88| 日本熟妇人妻中出视频| 四虎AV影视国产精品亚洲精品| 美女91网址 | 97中文天堂| 无码九九| 国产高清无码一区三区二区| 国产白领连续中出在线观看| 夜夜欧美| 五月天综合网| 日日AAvv| HEYZO高无码国产精品227| 啊啊啊97视频| 老熟女乱伦片| 人人妻人人操人人乐| 午夜亚洲| 久久大香蕉| 欧美96交| 九九热AV| 亚洲丝袜少妇在线| 欧美中文字幕男人天堂久久精品| 男人天堂资源| 欧美黑人XXXⅩ高潮交| 午夜福利合集| 欧美日韩第一页| 另类图片五月天| 欧美日本一区二区a人| 日韩国产十八禁| 91少妇| 欧美嫩性色| 天天亚洲| 色大师网站www永久网站视频| 91在线视频国产网站| 97精品国产97久久久久久免费| 中文字幕成人乱码熟女精品国50| 欧美熟爽综合| 国产成人91一区二区三区| 久久免费中文字幕在线观看| 1769一区| 久久超碰av在线| JIZZJIZZ国产精品喷水| 亚洲双插| 综合网欧美在线| 91无遮挡| 99热这里只有是精品10| 操逼网站地址| 四虎影视欧美| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 啊啊啊用力在线观看| 78精品在线| 国产日本熟女顶级一区二区三区视频| 久久婷婷电影网| A啊啊在线观看| 国产绿奴视频在线观看| 青草伊人网| 野狼激情网| 久久久亚洲高清不打码| 久久黄人人爽视频| 裸体美女久久久| 国产suv一区二区三区6| 高清不卡国产| 国产真实野战在线视频| 人人操人人肉久久精品| 久久久久亚洲一区女同性恋中文字幕| 探花一区在线| 超碰色综合| 久久久久921| 亚洲欲色9532548967一区| 1769国内精品视频| 欧美偷拍| 老司机午夜福利视频一区二区| 欧美日综合| 精品久久久久久无码| 职场同事知名国产国产精品久久欧美日韩| 人妻久热在线| 人妻-91porn| 男女性无套 免费九一| 少妇第一页| 人人色97| 免费一级欧美片片线观看| 三男一女不戴套的A片| 公司1区2区3区精产精| 美女啊啊啊啊啊啊啊| 不卡一区二区日本视频| 国产精品一区二区a| 91热色| 五月天色图| 麻豆人妻精品一区二区| 无码日韩人妻av一| 日本韩国国产精品一区| 国产久久久久久| 性爱1区| 成人性爱AV在线免费观看| 青青草好吊色| 日骚逼视频| 91中出在线| 精品9999| 四虎免费在线播放| 哑洲在线| 亚洲怡春院| 国产精品密臀网在线观看| 丝袜六区| 粉嫩国产精品久久粉嫩| 91啪啪| 操逼日韩无码 | 国产高清1234区| 国产农村一一级特黄毛片| 国内毛片婷婷六月色| 五码视频在线观看| 呦呦影院| 亚洲h片在线免费观看| 久久永久无码人妻视频| 乱伦强奸区日韩| 97免费在线观看| 777超碰| 久九色| 国产一区在线播放| 九九九热| 欧美传媒| 久久久久免费看少妇A片特黄| 日韩免费在线观看不卡| 日本孕妇一区二区视频操逼免费看| 91蜜臀熟女| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 3p国产欧美99热| 日本午夜久久电影| 丁香五月激情综合| 久久天天摸| JULIA人妻风俗店中出电影| 欧美色图片91| 中文字幕av丝袜| 九9精品| 玖玖综合视频| 一区二区三区美女超清| 国产精品黄色三级av| 日韩av一级黄片| 五月婷婷性爱| 蜜臀精品1区2区| 中文字幕日韩精品一区二区三区| 国产成人精品午夜福利| 五月天日日操夜夜操| 96麻豆精品一区二区三区| 日本人妻最新在线中| 99re免费视频精品全部| 亚洲精品日韩国产欧美| 天天操av懂色| 麻豆区久久久久亚| 凹凸精品熟女在线观看| 午夜视频久久久久一区| 人人爱操| 男人久久精品| 91n欧美| 久久久久亚洲av综合波多野制衣| 五月丁香网站| 91最新综合| 免费操逼视频下载| 青娱乐导航AV| 亚洲欧美视| 国产精品视频内谢女人| 在线人人人人人人精品超| 五月天激情综合网| av 模特一区了| 99热在线播放| 国产a级午夜毛片| 麻豆天美制片厂网站视频| 久久久三区二区一区| 日日操免费视频| 婷婷久久久| 精品人妻一区春色| 国产午夜精品在线观看| 99自拍视频| 久9久精品视频| 97香蕉网| 丁香五月婷婷五月| 蜜桃香蕉久草精品在线| 大香蕉专区| 九月AV| 中文字幕在线免费观看 | 亚洲成成熟女人综合一区二区| 欧美gv在线观看| 激情开心五月天| 少妇久久久免费| 午夜操逼不卡| wwe 天天干.com| 人妻久久一区二区三区 | 欧美亚洲日本激情在线| 亚洲射综合网| 亚洲中文字幕精品一区| 好淫网一二三视区| 国产福利合集| 超碰97欧美在线| 男人天堂东京热| 大香网伊人久久综合| 加勒比久久av| 国产激情av女片自拍| 91色伦综合| 18禁中文字幕| 国产精品久久久777| 国产精品女aA片爽爽视频| 婷婷在线视频| 青青色在线观看| 蜜臀久久99精品久久综合| 亚洲深夜福利| 人妻熟女字幕一区二区| 久久青青草在线视频| 日韩人妻少妇 一区二区三区| 天干天干天干天天做| 丁香婷婷啪啪| 玖玖综合网| 久久国产精品一级二级三级| 国产JDAV无码视频在线观看| 97玖玖超碰| 高清有码一区二区| 日韩午夜国产| 午夜久久无码1000合集| 天天舔日美女视频| 青青操97| 综合操逼| 俞拍久久国应视频| 97免费视频网| 欧美性巨大╳╳╳╳╳高跟鞋| www狠狠| 青青草久草| 亚洲人妻熟妇三十三区| 中文字幕狠狠玩| 肥佬影院91| 最新亚洲风情电影| 久操视频资源站公开| 99热一区二区三区四区| 伊人久久大香线综合无码| 婷婷丁香五月天综合东京热| 亚洲小说视频| 欧洲精品人妻| 亚洲丁香花色| 亚洲啪AⅤ永久无码| 91n.欧美| 亚州色站 日韩电影| 国产美女mm131爽爽爽爽| 精品久久97| 欧美72网页| 五月激情综合网| 看免费的黄片| 男人的天堂va| 无码人妻系列少妇| 高树玛利亚无码流出| 国产黄色av大片网站| 性综合网| 亚洲区小说| 青青青青草av在线观看| 久草五月| caoni国产亚洲av| 啊啊啊操死我| 日韩精品三级| 激情人妻另类| 91亚州欧美| 狠狠干综合| 日本激情免费大片| 91在线秘 男同| 91ise欧美| 5278欧美一区二区三区| 国产三级在线现体验区| 亚洲中文字幕熟女少妇一区二区| 亚洲天堂电影网| 超碰午夜在线| 日韩国语字幕| 婷婷色在线| 中国国国产一级特黄毛片| 欧美性爱精品七区| 日韩人妻丝袜中文字幕| 国产伊人精品在线| 国产中文字幕在线观看| 福利天堂| 人妻少妇色综合| 久久精品72| 精品人妻二区三区| 91在线欧色| 欧美色五月| 婷婷五月色| 国产精品熟女乱伦| 日韩av乱伦| 一级性爱aaaa| 不卡免费av在线播放 | 天天激色| 蜜臀一二三| 一级黄碟在线看| 99re69| 亚洲情色图片区| 色眯眯射| 热热热热日日漂亮永久永久国产日| 97干色天堂| 日本不卡码黄色| www.操| 久久九七| 熟女高潮合集-永久久久-成人AV | 国产熟女无套内射| 欧在线一二区| 日本久久女同性恋视频| 日韩激情电影中文字幕| 免费av在线播放二区| 日韩欧美成人性爱在线| 中文字幕亚洲热播人妻| 中文字幕av乱伦| 色色色热| 国产精品久久久久久夜夜夜| 日韩午夜国产| 人妻喷水| 欧美资源| 国产综合在线视频网站| 狠狠色噜噜狠狠狠狠狠色综合久久| 可以在线观看AV的网站| www.99色| 国产日逼视频| 99热这里只有精品地址| 老色69| 综合天天网| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 亚洲天天精品| 91亚洲人| 岛国网址国产| 中文字幕精品一区二区精品| 情色五月天久久久| 97超碰伊人| 免费在线看黄片av| 极品美女福利在线观看| 大香蕉宗合网在线| 日本熟妇精品九九| 超碰2017| 亚洲欧洲日韩国产自在线| 五月丁香综合网| 国产丰满熟夫69mpp| 日本天堂在线播放| 婷婷伊人五月| 婷婷91| 久久精品国产99国产精品亚洲| 超碰97综合网| 在线有码中文字幕| 99无码| 人妻熟女一区二区| 人人搞人人插人人操| 中文自拍欧美影视| 一区麻豆 高清中文字幕| 少妇高潮喷水无套久久久久久| 国产精品久久久久久久久久久久| 午夜福利免费精品视频| 有码人妻系列| 精品久9| 国产九九九九九九九九| 99精品热| 黄片www视频免费| 久久性视频| 99热日| 无码动漫av中文字幕| 99啪啪视频| 久久一级无码精品毛片6| 很黄很污的免费网站| 亚洲男人天堂网站| 国产AV高清AV无码| 一区二区三区色综合| 美女被啪到深处抽搐视频| 色99视频| 九九热只有精品| 精品性爱一二三区| 成人精品欧洲亚洲| 操操操日本的逼| 美国久久一二三四| A 天堂| 国产欧美一区二区| 91色花堂| 按摩中文字幕| 婷婷丁香激情| 啊啊啊com| 中文字幕欧美日韩三级| 麻豆天美久久91| 国产三级片在线观看| 丁香六月婷婷久久综合| 男人天堂新在线| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 亚洲精品97| www.久久99| 西西美女视频网| 另类TS人妖一区二区三区| 97超碰精品图片| 欧美综合色| 亚欧无码在线| 亚洲五月婷婷| 欧美激情综合| 久久久久久大| 美女骚尻视频| 久久熟妇五十路一区| 久久人人妻| 91精品人妻电影| 天综合中文| 国产小视频91| 一块操欧美性爱| 大逼色网站| 亚洲另类综合欧美| 亚洲无码视频免费在线观看网址!| 亚洲夜夜欢无码一区二区 | 爽 好舒服 无码刺激久久| 亚洲清纯唯美| 欧美在线视频99| 视频一区二区免费在线| 婷婷精品国产一区二区三区日韩| 欧美另类综合久久| 老熟乱一区二区三区四区| 麻豆精品久久久久久久| 欧美亚洲第一页| 在线 欧美 亚洲| 狠狠久久亚洲欧美专区| 五月丁香六月综合缴清无码| 欧美最大综合网| 3571色综合一区二区二区| 91大神精品长腿在线观看网站| 亚洲综合性网址| 中文字幕在线观看视频www| 超碰97欧美| 国产免费久久精品99re韩国| 97资源超碰| 在线看片国产精品每日更新| 婷婷激情四射| 亚洲人妻中文在线视频| 99re综合伊人| 超碰国产情侣自拍网| 日本视频一区二区三区| 96精品久久久久久久久| 女上位精品在线| 精精夜夜| 无码国产精品午夜不卡(| 美日韩男女操屄视频| 久久久免费高清中文视频| 欧美少妇第一页| 五月婷婷丁香六月| 久久免费精品视频免一| 白丝被操91| 国产sv美女内射| 亚洲欧美在线综合| 日本丝袜美腿人妻九九| 狠狠狠狠狠干| 无码在线亚洲| 亚洲天堂一区二区久久| 久操视频在线观看| 成人情色综合网| 久久久久网站-538在线视频-欧美永久乱码| 五月丁香综合啪啪| 探花熟女,姿勢到位,體驗感也到位| 91情色| 欧美韩日精品99综合| 亚洲情色一区二区三区| 99热精品青草在线| 夜夜爽77777| 激情综合五| 日韩不卡a级视频专区| 亚洲无码国产精品久久| 婷婷久久五月综合激情| 久久久久久综合久久伊人蜜月| 少妇色综合| 亚洲男人天堂2016| 日日橹狠狠爱欧美超碰| 中文字幕丝袜美腿| 精品人妻二区三区| 97精品国产97久久久| 99碰碰| 99热这里只有精品地址| 奇米狠999| 亚洲最大成人a毛毛片| 日韩精品在线视频在线观看| 久久精品 六十路 熟女 欧美| 中文字幕日韩国产传媒欧美精品| 久久五月视频| 丁香五月社区| 久久久九97| 国产欧美一区二区| 欧美日韩淫加| 精品国产72| 金典av| 夜夜免费视频| 丁香7月婷婷| 人人妻人人色一区二区三区| 97中文字幕一区| 精品国产乱码久久久久久免费| 亚洲 中文 欧美 日韩 在线| 亚洲双插| 日骚逼视频| 999综合网| 亚洲最新Av| 国产精品久久久久久久电影渣男| 日本成人A片免费看| 国产av又色又爽又黄| 美女国产一区二区久久| 亚洲综合九九| AV天堂丝袜| 久久久久七视频| 后入福利视频| 人妻精品一区二区三区| 亚洲91网| 手机在线视频国内精品| 亚洲第一在线视频| 蜜桃视频精品一区二区| 亚州色图狠狠干| 破处bbq| 色五月av| 欧美性爱91| 五月婷婷激情网| 爱干爱射网啊啊啊| 亚洲se电影| 啊啊啊啊操死我| 人人操肉肉| 天天干,夜夜爽| 精品人妻视频一区二区三区蜜桃视频| 一区二区不卡免费| 少妇久久久久久久久| 黄色片,com| av大香蕉| 99精品人人爽| 97碰| 熟女六十路| 婷婷五月天久久精品视频一区二区三区| 青操影院| 精品人妻一区二区三区四区石在线| 色综合av男人天堂| 亚洲日韩av一区二区三区百合| 91在线/欧洲| 啪啪综合网| 久久久精品国产亚洲AV无码| 免费9 1久久| 精品人妻久久久| 成人a级高清视频在线观看| 激情五月天婷婷| 一本久久精品中文字| 96精品久久| 日本高清一区二区在线| 有码色中文字幕在线观看| 亚洲图片91| 亚洲一区二区三区欧美日韩| 白丝jkav| 欧美色图色综合| 91中文在线| 日本 情色 1区2区3区| 韩国手机不卡无码三级视频| 少妇一线天久久久久久| 精品久久久久成人码免| 国产操伦| 国产精品网站www| www.av家庭乱伦| 亚洲激情四射| 青青草在线视频播放器| 家庭乱伦网站国产| 97一区二压| 国产成人精品必看 | 久久久精品网| 欧美国产日韩高清在线| 日本不卡一区二区三区| 国产成年女人免费视频播放a| 黄页大片在线观看| 亚洲丝袜诱惑| 日本天天操| 亚洲欧洲日韩中文字幕一区| 国模吧 一区二区三区| 91日日夜夜| 日本一区二区成人在线| 97超碰中文| 51一区二区三区| 亚洲熟女乱色一区二区三区久久久 | 亚洲色图亚洲| 人妻啊啊人妻啊啊| 99国产精品| 丰满人妻一区二区三区在线| 日韩在线观看三级电影| caopeng97| 老熟女乱伦片| 啊啊啊在线观看免费视频| 最新日日夜夜天天干干| 偷拍在线观看视频| 太久视频| 91久热| 亚洲精品视频二区| 亚洲日韩国产精品| 一区二区三区网站日日骚| 青娱乐淫乱1314| 天天看人人操屄犊摸阴| 精品毛片av一区二区| 校园春色宗合网| 午夜久久无码1000合集| 啊啊在线| 偷拍欧美激情| 91深夜夜| 丝袜美腿91| 天堂精品在线| 秋霞一集毛片观看| 制服中出中文人人精品| 中文字幕 国产 精品| JuliaAnn丝袜熟女系列| 国产SV一线| 黄色av片三级三级三级免费看| 凹凸 69堂 在线播放| 情色日播放AV| 久久精品毛片免费不卡| 蜜汁欧美| 大香蕉欧美伊| 偷看洗澡一二三区美女| 啊啊啊啊啊啊好多水| 久久精品72| 久草视频分类在线| 操国产逼| 51一区二区三区| 久久精品亚洲婷婷| 久久av成人无码免费| 91欧美经典| 夜草欧美| 920日本午夜免费| 777AV电影| 亚洲情色 欧美| 极品久久久久久久久久久久久久| 97人妻碰碰中文无码久热丝袜| 激情黄色片在线观看| 一二三四区操操Av| 97超碰天天爱天天爱| 十八禁啪啦拍视频无遮挡| 日韩精品资源专区二区| 97超碰影音| 又摸又舔在线观看网站| h在线看免费版在线看| 亚洲免费成人在线高清无码视频| 97K超碰在线| 在线情色电影 91大| 亚洲情色电影网| 色香色欲天天综合网天天来吧| 草草草视频在线免费看| 亚洲精品97p| 九一精品牛牛一区二区| 熟女人妻av在线资源,黄色的资源| 中文字幕一区二区韩| 少妇被c 黄 免费观看| 美女91网| 久久超碰av在线| 极品内射| 久久9亚洲| 久久极品伊人| 操逼日韩无码 | 亚洲人久久久网| 91新在线欧美| 99久久com免费视频′| 久久久久婷婷| 欧美极度丰满熟妇hd| 国产综合在线视频网站| 99久久久无码国产精品性啊聊| 色综合大香蕉| 91美女视频直播| 狠狠爱夜夜干| 日日噜噜夜夜久久亚洲一区二区| 国产黄a三级三级三级av在线看| 91狠狠综合久久久| 91黑人无码激情在线| 欧美另类综合久久| 欧美日本中字另类在线| 日本欧美韩国国产在线| 日本成熟少妇A∨网站| 欧美日韩1234| 亚洲久9| 东北熟女91| 9丨久久九九九| 91综合天天| 欧姜老司机| 国内精品99999| 日韩欧美麻豆| 国语精品av| 青青草依人大香蕉| 91白嫩| 天天天肏屄肏屄肏屄欧美欧美| 婷婷国产精品一区二区| 国产精品久久久亚洲第一牛牛_在线观看| 中国黄色特级精品一区二区三区片| 夜夜操中文字幕| 99精品久久久久久| 少妇精品久久久八区九区| 亚欧操逼片在线观看 | 亚洲久草AV色图| 日韩欧美天堂| 999国产精品999久久久久久| 人人澡人人干| 精品高潮| 99国产在线 精品 视频| 欧美成人一级免费电影| 91人妻Pr| 天天透伊人| 久久av网| 4虎在线视频| 欧美日韩中文字幕不卡| 青娱乐黄色录像| 久久一二三四| 大香蕉www.超碰| 92人人操人人| 国产欧美第五页| 熟妇艹鸡八| 九99久久| 啊v在线观看视频| Sekablack无码一区| 亚洲一区二区三区AV无码| 国产免费一区二区在线A片视频| 欧美熟爽综合| 欧美亚洲厕所精品偷拍91| 9九九国产| 懂色Av| 欧美另类综合久久| 大香交伊人网| 伊人青青草久久| 天天操天天干美女网址导航| 日韩视频中文字幕| 欧美性爱1080p| 口爆综合网| 国产精品久久久久久久免牛肉蒲团| 亚洲欧美激情小说| 麻豆视频国产一区二区| 伊人久久大香大香线蕉中文 | 97超碰欧美中文字幕| 国产精品福利视频播放| 操逼网免费无码视频| 91网站18在线观看| 日本好吊色视频| 女性91网站| 欧美系列在线一区二区| 插入综合网| 蜜臀aV午夜一区二区三区| 蜜臀一区二区三区在线| 精品国产乱码久久久久久口爆网站 | 久久久中文版| 97资源亚洲| 脫衣舞一区二区三区| 熟女人妻av在线资源,黄色的资源| 亚洲视频二区 | 九九aV| 中文幕97| 欧美高清第一页| 午夜国产成人福利视频| 性性久久| 91精品人| 日本 欧美 亚中文字幕| 亚洲drav色图| 国产精品亚洲色婷婷久久久| 性爱视频久久| 超碰这里有精品| 国产精品久久久久久久AV大片| 日本高清电影欧美色图| 老鸭窝成人| 日本国产高清色www视频在线| 亚洲综合有玛| 97精品免费| 久久乐| 日韩在线观看AV| 国产三区免费在线观看| 欧美亚州综合图片| 精品三级在线专区| 欧美熟爽综合| 久 久无码人妻AV| 丁香婷婷久久| 国产97av| 性做久久久久久免费观看软件| 一区二区三区成人| 久久久亚洲Av| 操操操操操操| 日日操免费视频| 欧美视频第二页| 欧美操人视频| 成人日韩中文字幕| 日韩有码 一区二区三区| 国产欧美美女免费观看视频| 97这里只有精品| 久久久久9久久久久| 综合97| 国产精品肉丝自拍| 亚洲国产美女久久久久| 动漫片子网站3黄| 欧美色www亚洲国产阿娇要播| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 亚洲婷婷丁香在线| 精品久久久无码| 亚洲本色精品一区二区久久| 小草精彩毛片| 亚洲黄色视频在线观看视频| 欧美色图成人网一区二区| 大学生口爆吞精| 蜜臀th| 在线不卡视频| 伊人九九九| 久久色一区| 久久男人精品| 怡红院亚洲怡春院av| 色色五月天婷婷| 成人线上超碰| 中 文字幕一区二区三四 五 区日 日 骚 | 懂色中文一区二区三区| 啊啊啊不要好爽日韩无码一区| 日韩国产欧美伦理在线| 日韩精彩视频| 天天流夜夜操| 国产精品麻豆成人av| 裸体美女久久久| 中文字幕一区日韩精| 999999精品| 亚洲天堂人人妻| 久久欧美性爱视频| 国产AV中文| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 国产又大又粗又长视频在线| 久操网址| 久久免费9| 操逼精品视频| 亚洲成人久久美女| 日韩性爱一级片| 中文字幕久久亚州无码| 99在线精品视频| 51久久夜色精品国产麻豆| 天欧美在线| 奸色色 男人天堂 天天射| 岛国色情视频在线观看| 日本大香蕉综合网红本杳社区| 国产专区路线| 欧美疯狂做爰xxxx| 亚洲无码 国产无码| 9997se| 国产综合久久久鬼色| 欧美v亚洲v日韩v最新在线二区| 亚洲情色欧美| 国产AV线| 欧美午夜色妇色鬼| av大香蕉| 日韩精品中文字幕一| 东京热男人的天堂| 欧美激情精品久久久| 精彩视频日韩| 婷婷综合五月| 久久精品日韩| 秋霞Av理论一级在线| 日韩射图| 男人的天堂VA在线| 久久熟女人| 免费一级欧美片片线观看| 中文字幕,人妻,日韩| 久久9久| 国产免费小视频| 美女91色黄18| 香蕉久久精品| 1956日韩精品| 色播综合| 小情侣高清国产在线视频| 亚洲av噜噜噜噜噜噜| 熟女精品日韩一区二区三区| 欧美综合 站| 热久久99999| 伊人国产av| 欧美乱色| 国产成人亚洲精品自产在线| 国产树林里野战在线看| 一级片在线观看高清无码| a'v在线资源| 久艹日日日| 久久久久白虎| 国内一级精品| 婷婷丁香人妻| 亚洲成人AB| 亚洲影视第一页| 九九九精品色乱九九九| 91老熟女老女人国产老太| 欧美激情欧美精品| 欧美一区二区情色| 九九精品美女高溯喷水| 久久怡红院| a网站免费观看| 996热| 久久丁香| 久热伊人| 大香蕉碰| 后入 亚洲 美女 射| 91n美女视频| 真实高潮91| 久久有碼| 999九九精品| 日韩中文9| 亚洲欧美变态| 99少妇内射| 97色综合中文网| w w w.久久精品| 综合激情二| 狠狠中文字幕| 无码免费精品高清| 日本国产成人亚洲精品无码| 成人av免费观看|