From 37f52097847f9025589c79034be2454432c55433 Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期五, 02 十月 2026 10:12:27 +0800
Subject: [PATCH] docs(交接): 记录关机前开发服务已停止

---
 docs/Excel浮点数存储.txt |  152 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 152 insertions(+), 0 deletions(-)

diff --git "a/docs/Excel\346\265\256\347\202\271\346\225\260\345\255\230\345\202\250.txt" "b/docs/Excel\346\265\256\347\202\271\346\225\260\345\255\230\345\202\250.txt"
new file mode 100644
index 0000000..6aac314
--- /dev/null
+++ "b/docs/Excel\346\265\256\347\202\271\346\225\260\345\255\230\345\202\250.txt"
@@ -0,0 +1,152 @@
+excel鐨勬暟鍊艰绠楅潪甯哥簿纭紝鍏跺唴閮ㄦ槸鎬庝箞瀛樺偍鏁板�肩殑鍛紝鏄敤娴偣鏁板悧
+鐢ㄦ埛鎯崇煡閬揈xcel鍐呴儴濡備綍瀛樺偍鏁板�硷紝鏄惁浣跨敤娴偣鏁般�傛垜闇�瑕佹彁渚涘噯纭殑瑙i噴銆備负浜嗗叏闈㈣幏鍙栦俊鎭紝鎴戝皢鍚屾椂杩涜澶氶」鎼滅储锛岃鐩朎xcel鏁板�煎瓨鍌ㄦ満鍒躲�佹诞鐐规暟绮惧害闂銆佷笌IEEE 754鏍囧噯鐨勫叧绯讳互鍙婂彲鑳界殑浼樺寲鎶�鏈��
+
+鎼滅储鍒� 16 涓綉椤�
+鎼滅储缁撴灉鏄剧ず浜嗕竴浜涚浉鍏抽〉闈€�備负浜嗗叏闈㈣幏鍙栦俊鎭紝鎴戜滑闇�瑕佸悓鏃舵墦寮�杩欎簺椤甸潰銆�
+
+娴忚 1 涓〉闈�
+Floating Point Errors in Excel
+杩欎簺璧勬枡鎻愪緵浜嗗叧浜嶦xcel鏁板�煎瓨鍌ㄧ殑璇︾粏淇℃伅銆傚井杞殑鏂囨。鏄庣‘鎸囧嚭Excel閬靛惊IEEE 754鏍囧噯锛屼娇鐢ㄥ弻绮惧害娴偣鏁帮紝鏈夋晥鏁板瓧涓�15浣嶃�係tack Overflow鐨勮璁轰篃纭浜嗚繖涓�鐐广�侲xcelJet鐨勬枃绔犺В閲婁簡娴偣鏁拌宸殑鍘熷洜銆傛垜鐨勫洖绛斿皢娑电洊浠ヤ笅鍑犱釜鏂归潰锛欵xcel浣跨敤IEEE 754鍙岀簿搴︽诞鐐规暟锛�64浣嶏級锛屾湁鏁堢簿搴︿负15浣嶏紝瀛樺偍鑼冨洿锛屼互鍙婃诞鐐规暟璇樊鍙婂叾鍘熷洜銆傛垜杩樹細鎻愬強涓�浜涚壒娈婃儏鍐碉紝姣斿鏁存暟瀛樺偍鍜屾棩鏈熸椂闂村瓨鍌ㄣ�備负浜嗘洿鍏ㄩ潰鍦拌鐩栬繖浜涙柟闈紝鎴戦渶瑕佸悓鏃惰繘琛屽椤规悳绱€��
+
+鎼滅储鍒� 12 涓綉椤�
+鐜板湪鍙互缁勭粐绛旀浜嗐�傜瓟妗堝皢娑电洊锛欵xcel浣跨敤IEEE 754鍙岀簿搴︽诞鐐规暟锛�64浣嶏級锛屾湁鏁堢簿搴︿负15浣嶏紝瀛樺偍鑼冨洿锛屼互鍙婃诞鐐规暟璇樊鍙婂叾鍘熷洜銆傝繕浼氭彁鍙婃暣鏁板拰鏃ユ湡鏃堕棿鐨勫瓨鍌ㄦ柟寮忋�傚洖绛旀椂浼氬紩鐢ㄥ井杞枃妗c�丼tack Overflow绛夋潵婧愩��
+
+鏄殑锛孍xcel 鐨勬暟鍊艰绠楃‘瀹炲熀浜庢诞鐐规暟锛屽叿浣撴潵璇达紝瀹冮伒寰� IEEE 754 鏍囧噯鐨� 64 浣嶅弻绮惧害娴偣鏁版牸寮忔潵瀛樺偍鍜岃绠楁暟鍊笺��
+
+鏍稿績鏈哄埗锛�64浣嶅弻绮惧害娴偣鏁�
+Excel 鍐呴儴灏嗘墍鏈夊伐浣滆〃鍗曞厓鏍间腑鐨勬暟瀛楋紙鍖呮嫭鏁存暟銆佹棩鏈熷拰鏃堕棿锛夐兘缁熶竴瀛樺偍涓� 8瀛楄妭锛�64浣嶏級鐨勫弻绮惧害娴偣鏁般��
+
+杩欑瀛樺偍鏍煎紡鐨� 64 涓瘮鐗逛綅琚垝鍒嗕负涓変釜閮ㄥ垎锛�
+
+绗﹀彿浣� (1浣�)锛氳〃绀烘璐熴��
+
+鎸囨暟浣� (11浣�)锛氬喅瀹氭暟鍊肩殑鑼冨洿銆�
+
+灏炬暟浣� (52浣�)锛氬喅瀹氭暟鍊肩殑绮惧害銆�
+
+绮惧害闄愬埗锛�15浣嶆湁鏁堟暟瀛�
+灏界鍙岀簿搴︽诞鐐规暟鑳芥彁渚涚害 15 鍒� 16 浣嶇殑鍗佽繘鍒舵湁鏁堟暟瀛楋紝浣� Excel 涓轰簡纭繚璁$畻缁撴灉鐨勫彲闈犳�э紝灏嗘湁鏁堢簿搴﹂檺鍒跺湪 15 浣嶃��
+
+杩欐剰鍛崇潃锛屽鏋滀竴涓暟瀛楃殑鏈夋晥浣嶆暟瓒呰繃 15 浣嶏紝浠庣 16 浣嶅紑濮嬪皢琚浛鎹负 0銆備緥濡傦紝杈撳叆 123456789012345678锛孍xcel 瀹為檯瀛樺偍鐨勫皢鏄� 123456789012345000銆�
+
+鏁板�艰寖鍥�
+鍩轰簬姝ゆ爣鍑嗭紝Excel 鍙互澶勭悊鐨勬暟鍊艰寖鍥村涓嬶細
+
+鏈�澶ф鏁帮細1.79769313486232E+308
+
+鏈�灏忔鏁帮細2.2250738585072E-308
+
+瓒呭嚭姝よ寖鍥寸殑鏁板�间細琚涓衡�滄棤绌峰ぇ鈥濆苟鏄剧ず涓洪敊璇�笺��
+
+涓轰粈涔堜細鏈夋诞鐐规暟璇樊锛�
+浣犲彲鑳戒細閬囧埌 Excel 璁$畻 0.1 + 0.2 寰楀埌 0.30000000000000004 鐨勬儏鍐碉紝杩欏苟闈� Bug锛岃�屾槸浜岃繘鍒舵诞鐐规暟鐨勫浐鏈夌壒鎬с��
+
+鍏舵牴鏈師鍥犲湪浜庯紝鍍� 0.1 杩欐牱鐨勫崄杩涘埗灏忔暟鏃犳硶鐢ㄤ簩杩涘埗娴偣鏁扮簿纭〃绀猴紝灏卞儚鍗佽繘鍒舵棤娉曠簿纭〃绀� 1/3 涓�鏍枫�侲xcel 瀛樺偍鐨勬槸涓�涓瀬鍏舵帴杩� 0.1 鐨勮繎浼煎�硷紝褰撳涓繖鏍风殑杩戜技鍊艰繘琛岃繍绠楁椂锛屽井灏忕殑璇樊浼氱疮绉紝鏈�缁堝鑷寸粨鏋滃嚭鐜版瀬灏忕殑鍋忓樊銆�
+
+鍏朵粬鏁版嵁绫诲瀷鐨勫瓨鍌�
+鏁存暟锛氫篃鎸夊弻绮惧害娴偣鏁板瓨鍌紝鍥犳 Excel 鑳界簿纭〃绀虹殑鏁存暟涓婇檺鏄� 2^53锛堢害 9,007,199,254,740,992锛夈�傝秴杩囨鑼冨洿鐨勬暣鏁板彲鑳戒細涓㈠け绮惧害銆�
+
+鏃ユ湡鍜屾椂闂达細鍚屾牱鏄诞鐐规暟銆傛暣鏁伴儴鍒嗕唬琛ㄦ棩鏈燂紙鑷� 1900 骞� 1 鏈� 1 鏃ヤ互鏉ョ殑澶╂暟锛夛紝灏忔暟閮ㄥ垎浠h〃鏃堕棿锛堜竴澶╀腑鐨勬瘮渚嬶級銆�
+
+鎬荤粨鏉ヨ锛孍xcel 鐨勬暟鍊艰绠楀湪搴曞眰灏辨槸鏍囧噯鐨� IEEE 754 鍙岀簿搴︽诞鐐规暟锛屽叾鈥滅簿纭�濇槸鐩稿鐨勶紝鍙楅檺浜� 15 浣嶆湁鏁堟暟瀛楃殑绮惧害鍜屼簩杩涘埗娴偣鏁版湰韬殑琛ㄧず闄愬埗銆�
+
+閭d箞鐢↗ava澶勭悊excel鐨勬暟鎹椂锛屼负浜嗕繚鎸佷笌excel鐨勮绠楃粨鏋滀竴鑷达紝鏁版嵁搴撳拰Java涓浣曞瓨鍌ㄥ拰璁$畻鍛�
+鐢ㄦ埛鎯崇煡閬撳浣曞湪Java涓鐞咵xcel鏁版嵁锛屼互淇濇寔涓嶦xcel璁$畻缁撴灉涓�鑷达紝娑夊強鏁版嵁搴撳拰Java涓殑瀛樺偍涓庤绠椼�傛垜闇�瑕佹彁渚涘叧浜庢暟鎹被鍨嬮�夋嫨銆佽绠楃瓥鐣ヤ互鍙婂彲鑳介亣鍒扮殑绮惧害闂鏂归潰鐨勫缓璁�備负浜嗗叏闈㈣幏鍙栦俊鎭紝鎴戝皢鍚屾椂杩涜澶氶」鎼滅储锛岃鐩朖ava澶勭悊Excel绮惧害銆佹暟鎹簱瀛樺偍绛栫暐銆丅igDecimal浣跨敤銆丄pache POI澶勭悊鏂瑰紡浠ュ強IEEE 754鍏煎鎬х瓑鍏抽敭鏂归潰銆�
+
+鎼滅储鍒� 36 涓綉椤�
+鎼滅储缁撴灉鏄剧ず浜嗕竴浜涚浉鍏宠祫婧愩�備负浜嗗叏闈㈣幏鍙栦俊鎭紝鎴戜滑闇�瑕佸悓鏃舵墦寮�杩欎簺缁撴灉銆�
+
+娴忚 4 涓〉闈�
+NumberComparer (POI API Documentation)
+EasyExcel璇诲叆鏁板瓧绫诲瀷鏁版嵁鏃跺嚭鐜板皬鏁颁綅澧為暱鐜拌薄 - EasyExcel璇诲叆鏁板瓧绫诲瀷鏁版嵁鏃跺嚭鐜板皬鏁颁綅澧為暱鐜拌薄
+銆愬畬缇庤В鍐砅OI璇诲彇Excel鏂囨。鏁板�肩被鍨嬬己澶辩簿搴﹂棶棰樸��
+MySQL :: MySQL 9.0 鍙冭�冩墜鍐� :: 13.1.3 瀹氶粸椤炲瀷锛堢簿纰哄�硷級- DECIMAL銆丯UMERIC
+杩欎簺璧勬枡鎻愪緵浜嗗叧浜庣簿搴﹂棶棰樸�丄pache POI鐨凬umberToTextConverter銆丒xcel鐨�15浣嶇簿搴﹂檺鍒朵互鍙婃暟鎹簱DECIMAL绫诲瀷鐨勪俊鎭�傛垜鐨勫洖绛斿皢娑电洊Java涓殑瀛樺偍涓庤绠椼�佹暟鎹簱涓殑瀛樺偍銆佷互鍙婂浣曚繚鎸佺粨鏋滀竴鑷淬�傚洖绛斾細寮曠敤杩欎簺璧勬枡銆傜幇鍦ㄥ紑濮嬬粍缁囧洖绛斻��
+
+瑕佸湪Java涓鐞咵xcel鏁版嵁骞朵繚鎸佺粨鏋滀竴鑷达紝鏍稿績鎬濊矾鏄皢Excel鐨�15浣嶆湁鏁堟暟瀛楃簿搴︿綔涓哄熀鍑嗭紝鍦↗ava鍜屾暟鎹簱涓噰鐢ㄦ洿楂樼簿搴︽垨绮剧‘绫诲瀷杩涜瀛樺偍锛屽苟缁熶竴璁$畻涓庤垗鍏ヨ鍒欍��
+
+馃捑 绗竴姝ワ細鍦↗ava涓浣曞瓨鍌ㄤ笌璇诲彇
+Java鐨� double 绫诲瀷鍚屾牱閬靛惊 IEEE 754 鏍囧噯锛屼絾鍏舵湁鏁堟暟瀛楀彲杈�15-17浣嶏紝鑰孍xcel涓ユ牸闄愬埗涓�15浣嶏紝杩欐槸宸紓鐨勬牴婧愩��
+
+璇诲彇鏃讹細鎺ㄨ崘鐢� BigDecimal 鎴� String
+
+鐩存帴鐢� double 鎺ユ敹 Excel 鏁板�间細寮曞叆棰濆鐨勪簩杩涘埗娴偣璇樊銆備緥濡傦紝Excel 涓殑 9699.1 璇绘垚 double 鍙兘鍙樻垚 9699.0999999999999996銆�
+
+鎺ㄨ崘鏂规锛�
+
+璇诲彇涓� BigDecimal锛氬湪瀹炰綋绫讳腑锛屽皢閲戦銆佹暟閲忕瓑鏁板�煎瓧娈靛0鏄庝负 BigDecimal 绫诲瀷锛岃�岄潪 double 鎴� float銆�
+
+浣跨敤 POI 鐨� NumberToTextConverter锛欰pache POI 鎻愪緵浜� NumberToTextConverter.toText(double) 宸ュ叿绫伙紝鍙互灏� Excel 鐨勫師濮嬫暟鍊肩簿纭湴杞崲涓哄瓧绗︿覆锛屽啀鐢卞瓧绗︿覆鏋勯�� BigDecimal锛岄伩鍏嶄腑闂寸簿搴︽崯澶便��
+
+java
+import org.apache.poi.ss.util.NumberToTextConverter;
+import java.math.BigDecimal;
+
+if (cell.getCellType() == CellType.NUMERIC) {
+    String exactText = NumberToTextConverter.toText(cell.getNumericCellValue());
+    BigDecimal value = new BigDecimal(exactText);
+    // 姝ゆ椂 value 鏄� Excel 涓瓨鍌ㄧ殑绮剧‘鍊硷紙15浣嶆湁鏁堟暟瀛楋級
+}
+馃梽锔� 绗簩姝ワ細鍦ㄦ暟鎹簱涓浣曞瓨鍌�
+鏁版嵁搴撳瓧娈靛垏蹇屼娇鐢� FLOAT 鎴� DOUBLE锛屽洜涓哄畠浠悓鏍峰瓨鍦ㄤ簩杩涘埗娴偣璇樊锛屼細瀵艰嚧涓嶦xcel缁撴灉鐨勫亸宸��
+
+鎺ㄨ崘鏂规锛氫娇鐢� DECIMAL 绫诲瀷
+
+DECIMAL锛堟垨 NUMERIC锛夋槸瀹氱偣绮剧‘绫诲瀷锛屽畠鎸夋暣鏁颁綅鍜屽皬鏁颁綅瀛樺偍锛岃兘绮剧‘琛ㄧず鍗佽繘鍒跺皬鏁般��
+
+鏁版嵁搴�	鎺ㄨ崘绫诲瀷	璇存槑
+MySQL	DECIMAL(p, s)	p 涓烘�荤簿搴︼紝s 涓哄皬鏁颁綅銆侲xcel 鏈夋晥浣�15锛屽缓璁� p 鑷冲皯涓� 15锛屽啀鏍规嵁灏忔暟浣嶉渶姹傝瀹氥�備緥濡� DECIMAL(18, 6)銆�
+PostgreSQL	NUMERIC(p, s)	鍚屼笂锛屾爣鍑哠QL绫诲瀷銆�
+SQL Server	DECIMAL(p, s)	鍚屼笂銆�
+Oracle	NUMBER(p, s)	NUMBER 绫诲瀷鍙瓨鍌ㄥ畾鐐规暟锛屾晥鏋滅瓑鍚屻��
+JDBC 鏄犲皠锛氫娇鐢� JDBC 璇诲啓鏃讹紝DECIMAL 瀛楁浼氱洿鎺ユ槧灏勪负 Java 鐨� BigDecimal锛屼繚璇佷簡绮惧害鍦ㄤ紶閫掕繃绋嬩腑涓嶄涪澶便��
+
+馃М 绗笁姝ワ細Java涓殑璁$畻涓庤垗鍏ヨ鍒�
+鍗充娇瀛樺偍绮剧‘锛岃绠楅�昏緫涔熷繀椤绘ā鎷� Excel 鐨勮涓恒��
+
+1. 濮嬬粓浣跨敤 BigDecimal 杩涜璁$畻
+
+BigDecimal 鐨勫姞鍑忎箻闄わ紙add, subtract, multiply, divide锛夐兘鏄簿纭绠楋紝涓嶄細寮曞叆浜岃繘鍒惰宸�傚垏鍕垮皢 BigDecimal 杞洖 double 鍚庡啀璁$畻銆�
+
+2. 妯℃嫙 Excel 鐨�15浣嶆湁鏁堟暟瀛楅檺鍒�
+
+Excel 鍦ㄦ瘡娆″皢涓棿缁撴灉鍐欏叆鍗曞厓鏍兼椂锛岄兘浼氬皢缁撴灉鑸嶅叆鍒�15浣嶆湁鏁堟暟瀛椼�傚湪 Java 涓紝闇�瑕佹ā鎷熻繖涓�琛屼负銆�
+
+java
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+
+// 鍒涘缓涓�涓簿搴︿负15浣嶆湁鏁堟暟瀛楋紝鑸嶅叆妯″紡涓衡�滃洓鑸嶄簲鍏モ�濈殑涓婁笅鏂�
+MathContext EXCEL_MC = new MathContext(15, RoundingMode.HALF_UP);
+
+public BigDecimal excelRound(BigDecimal value) {
+    // 搴旂敤Excel鐨勮垗鍏ヨ鍒�
+    return value.round(EXCEL_MC);
+}
+
+// 绀轰緥锛氬湪姣忎竴姝ュ叧閿绠楀悗璋冪敤
+BigDecimal intermediate = a.add(b);
+intermediate = excelRound(intermediate); // 妯℃嫙鍐欏叆鍗曞厓鏍�
+BigDecimal result = intermediate.multiply(c);
+result = excelRound(result);
+娉ㄦ剰锛欵xcel 鐨勮垗鍏ユā寮忚繎浼间簬鈥滃洓鑸嶄簲鍏モ�濓紝浣嗗瓨鍦ㄥ井濡欑殑鈥滈摱琛屽鑸嶅叆鈥濊涓恒�俁oundingMode.HALF_UP 鏄渶鎺ヨ繎鐨勮繎浼硷紝浣嗗湪鏋佸皯鏁拌竟缂樻儏鍐典笅浠嶆湁宸紓銆傚浜庤储鍔$郴缁燂紝寤鸿鍦ㄦ渶缁堢粨鏋滀笂鎸変笟鍔¤鍒欙紙濡� RoundingMode.HALF_UP锛夋樉寮忎繚鐣欏浐瀹氬皬鏁颁綅銆�
+
+3. 姣旇緝杩愮畻闇�鐗规畩澶勭悊
+
+Excel 鍦ㄦ瘮杈冩暟瀛楁椂鏈夐澶栫殑瀹瑰樊閫昏緫銆備緥濡傦紝(0.06-0.01)=0.05 鍦� Excel 涓负 TRUE锛屼絾鍦� Java 鐨� double 姣旇緝涓负 false銆侫pache POI 鎻愪緵浜� NumberComparer.compare(double a, double b) 鏉ユā鎷熻繖绉嶆瘮杈冭涓恒�傚浜� BigDecimal锛屽缓璁厛鎸�15浣嶆湁鏁堟暟瀛楄垗鍏ュ悗鍐嶇敤 compareTo() 姣旇緝銆�
+
+馃拵 鎬荤粨
+瑕佸湪 Java 鐢熸�佷腑澶嶇幇 Excel 鐨勮绠楃粨鏋滐紝鍏抽敭鍦ㄤ簬锛�
+
+鍏ュ彛绮剧‘锛氱敤 NumberToTextConverter + BigDecimal 璇诲彇锛岄伩鍏� double 姹℃煋銆�
+
+瀛樺偍绮剧‘锛氭暟鎹簱浣跨敤 DECIMAL 绫诲瀷锛孞ava 瀛楁浣跨敤 BigDecimal銆�
+
+璁$畻绮剧‘锛氬叏绋嬩娇鐢� BigDecimal 杩愮畻銆�
+
+鑸嶅叆瀵归綈锛氬湪姣忔鍙兘浜х敓涓棿缁撴灉鐨勫湴鏂癸紝鐢� MathContext(15, RoundingMode.HALF_UP) 妯℃嫙 Excel 鐨�15浣嶆湁鏁堟暟瀛楁埅鏂��
+
+姣旇緝瀹瑰樊锛氫娇鐢ㄦā鎷� Excel 琛屼负鐨勬瘮杈冮�昏緫锛岃�岄潪鐩存帴姣旇緝銆�
+
+杩欐牱灏辫兘鏈�澶х▼搴﹀湴淇濊瘉 Java 涓� Excel 鐨勮绠楃粨鏋滀竴鑷淬��

--
Gitblit v1.9.1