91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

大促備戰(zhàn)中的隱蔽陷阱:Double轉(zhuǎn)String會(huì)使用科學(xué)計(jì)數(shù)法展示?

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2026-01-15 15:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、背景:大促備戰(zhàn)中的異常數(shù)據(jù)

大促備戰(zhàn)期間,接到客戶反饋我司上傳到客戶服務(wù)器上的文件存在科學(xué)計(jì)數(shù)法表示的情況(下圖的4.55058496E7),與約定不符。

wKgZPGlokWmAG8bqAAKWAO6Bh7A426.png

??

查看轉(zhuǎn)換前的數(shù)據(jù)是:455058496,轉(zhuǎn)換后(除以10:進(jìn)行毫米到厘米的轉(zhuǎn)換)就變成了科學(xué)計(jì)數(shù)法形式了。

wKgZO2lokWmAcQ5rAAE3VN848SY583.png

??

問題代碼:

說明:

這個(gè)是個(gè)EL表達(dá)式,含義是使用expr的值作為計(jì)算邏輯,計(jì)算結(jié)果賦值給var指向的變量temp.b,類型是java.lang.String。

?_item代表當(dāng)前上下文里的一個(gè)對(duì)象。

?boxLength是_item對(duì)象所具備的屬性。

?該表達(dá)式先對(duì)boxLength執(zhí)行除以 10 的運(yùn)算,再把運(yùn)算結(jié)果轉(zhuǎn)換為字符串(由clazz定義的)。

業(yè)務(wù)上,boxLength是個(gè)長度的概念,單位是毫米,除以10是轉(zhuǎn)換成厘米的含義。為了保證精度,系統(tǒng)(基于JAVA)會(huì)先將boxLength先轉(zhuǎn)成java.lang.Double類型,再除以10,最后調(diào)用Double.toString()方法轉(zhuǎn)成字符串。

二、問題定位:字符串轉(zhuǎn)換的科學(xué)計(jì)數(shù)法陷阱

2.1 問題復(fù)現(xiàn)

代碼:

Double depthInDouble = 455058496d/10;
log.info("depthInDouble={}", depthInDouble);

結(jié)果:

wKgZPGlokWqAd2qbAAA5dUCNPTs551.png

??

2.2 原因分析

問題就出在了最后一行,日志輸出的時(shí)候Double會(huì)被轉(zhuǎn)成String,調(diào)用Double.toString()方法,而對(duì)于Double對(duì)象的值在一定的范圍內(nèi),會(huì)使用科學(xué)計(jì)數(shù)法表示。

log.info的調(diào)用鏈(為什么會(huì)調(diào)用到Double.toStirng()):

log.info("depthInDouble={}", depthInDouble);
  ↓
Log4jLogger.info(String format, Object arg)
  ↓
AbstractLogger.logIfEnabled(...)
  ↓
AbstractLogger.logMessage(...)
  ↓
ParameterizedMessageFactory.newMessage(...)
  ↓
ParameterizedMessage 構(gòu)造函數(shù)(參數(shù)被暫存為 Object[])
  ↓
// 此時(shí)尚未調(diào)用 Double.toString()
  ↓
// 當(dāng) Appender 執(zhí)行輸出時(shí)...
Appender.append(LogEvent)
  ↓
LogEvent.getMessage().getFormattedMessage() // 觸發(fā)消息格式化
  ↓
ParameterizedMessage.getFormattedMessage()
  ↓
ParameterizedMessage.formatMessage(...)
  ↓
ParameterizedMessage.argToString(Object)
  ↓
Double.toString() // 終于在這里被調(diào)用!

查看Double.toString()的源碼,可以看到相關(guān)解釋:

wKgZPGlokWuAAmkNAAJuwK22l34806.png

??

也就是說對(duì)于極?。ㄐ∮?0^-3)或者極大(大于10^7)值的浮點(diǎn)數(shù),轉(zhuǎn)成String的時(shí)候會(huì)使用科學(xué)計(jì)數(shù)法表示,驗(yàn)證如下。

代碼:

public static void main(String args[]) {
       String depth = "455058496"; // 單位:毫米
       Double depthInDouble = Double.parseDouble(depth)/10;
       String doubleInString = String.valueOf(depthInDouble);
       log.info("depthInDouble={}", depthInDouble);
       log.info("doubleInString={}", doubleInString);
       depthInDouble = 1e-3;
       log.info("10^-3 = {}", depthInDouble);
       depthInDouble = 1e7;
       log.info("10^7 = {}", depthInDouble);
       Double aVerySmallNumber = 1e-9;
       depthInDouble = 1e-3 - aVerySmallNumber;
       log.info("10^-3 - delta = {}", depthInDouble);
       depthInDouble = 1e7 - aVerySmallNumber;
       log.info("10^7 - delta = {}", depthInDouble);
   }

運(yùn)行結(jié)果:

wKgZO2lokWuAGYkJAABf4V6_QsI731.png

??

說明,10^-3不會(huì)使用科學(xué)記計(jì)數(shù)法,但是小于它就會(huì)使用科學(xué)計(jì)數(shù)法,10^7就會(huì)使用科學(xué)計(jì)數(shù)法,小于它就會(huì)不會(huì),大于它會(huì)。

2.3 為什么要使用科學(xué)計(jì)數(shù)法

2.3.1 小數(shù)在計(jì)算機(jī)內(nèi)是如何表示的

先不急于討論為什么使用科學(xué)計(jì)數(shù)法,我們先看看小數(shù)在計(jì)算機(jī)內(nèi)是如何表示的。

從存儲(chǔ)角度來看,計(jì)算機(jī)的存儲(chǔ)是有限資源,能存儲(chǔ)的數(shù)據(jù)是有范圍的,不是無限大,也就是說有限的硬件資源限制了計(jì)算機(jī)可以表示的數(shù)值的大小。對(duì)于一個(gè)浮點(diǎn)數(shù),我們可以用10個(gè)bit存儲(chǔ),也可以用100個(gè),為了實(shí)現(xiàn)跨設(shè)備、跨平臺(tái)的數(shù)據(jù)統(tǒng)一表示和交換,IEEE 754 規(guī)范定義了標(biāo)準(zhǔn)格式,規(guī)定了Double類型使用64比特。

wKgZPGlokWyAIlgeAAB73AUrY0o099.png

當(dāng)64個(gè)比特確定了,那么它可以表示的數(shù)字的范圍就確定了,接下來考慮怎么表示小數(shù),可以表示什么范圍內(nèi)的小數(shù),進(jìn)而再討論威懾么定義超過10^7或者小于10^-3使用科學(xué)計(jì)數(shù)法,而不用普通的方式(定點(diǎn)數(shù)表示法)。

類似整數(shù)可以利用除以2取余獲得其二級(jí)制的表示形式,例如:123(10進(jìn)制)= 1111011(二進(jìn)制)

wKgZO2lokW2AaNxmAAubgZjagyA589.png

??

小數(shù)則進(jìn)行乘2取整,如0.123(10進(jìn)制)= 0. 0001111101(二進(jìn)制,位數(shù)會(huì)一直循環(huán)無法精確表示,只能近似,這里取了10位)

wKgZO2lokW6AGBorAArNxoeenuw019.png

??

?

因此最簡單的一種設(shè)計(jì)(不考慮正負(fù))就是將64位中的一部分劃分為整數(shù)位,一部分劃分為小數(shù)位,比如32位整數(shù),32位小數(shù)(定點(diǎn)數(shù)表示法)。

那么這樣設(shè)計(jì)的Double最大數(shù)可以表示2^32-1,

如果要以米為單位表示銀河系直徑,約1光年299792458米/秒*1年 = 299792458米/秒*365天*86400秒/天 ≈ 9.45 * 10^15 ,而2^32-1≈4.29 * 10^9 (遠(yuǎn)小于1光年),因此無法使用Double表示銀河系直徑,無法支撐天文學(xué)科的計(jì)算了。

wKgZPGlokW-AS_PZAAVZeZDkbEs624.png

??

這樣設(shè)計(jì)的Double最小可以表示2^-32=2.38*10^-10 ,一個(gè)質(zhì)子的大小是0.84飛米=8.4*10^-16,因此也無法支持物理學(xué)的計(jì)算。

所以,矛盾在于增加整數(shù)部分的位數(shù),就會(huì)壓縮小數(shù)部分的位數(shù),不同的領(lǐng)域中,既有要求數(shù)字很大可表示的(在乎量級(jí),如天文學(xué)、金融學(xué)),也有要求數(shù)值很小能表示的(在乎精度,如物理學(xué)、生物學(xué))。

可以看到,上面的很多數(shù)字表達(dá),我們也使用了科學(xué)計(jì)數(shù)法的表示形式來簡化表達(dá),對(duì)于上面這個(gè)數(shù)字(9.454,254,955,488,000)寫起來麻煩還很占地方,而且我們也不需要那么精確,只是看個(gè)量級(jí),因此會(huì)寫成9.45 * 10^15 ,不影響理解。

即表示一個(gè)極大或者極小的數(shù)可以使用:【數(shù)值*底數(shù)^指數(shù)】的形式,對(duì)于大數(shù)來講指數(shù)就是正的,小數(shù)就是負(fù)的,計(jì)算機(jī)使用二進(jìn)制,因此底數(shù)就是2,所以小數(shù)可以表示成:【數(shù)值*2^指數(shù)】的形式,這個(gè)數(shù)值,其實(shí)就是尾數(shù)。

計(jì)算機(jī)專家們經(jīng)過多種研究,最終經(jīng)過IEEE確定了IEEE 754標(biāo)準(zhǔn),即不確定整數(shù)和小數(shù)的位數(shù)(固定小數(shù)點(diǎn),即定點(diǎn)數(shù)),而使用變化的位數(shù),也就是小數(shù)點(diǎn)可以浮動(dòng),即浮點(diǎn)數(shù)表示法。浮點(diǎn)數(shù)表示法定義了小數(shù)由符號(hào)位+指數(shù)位+尾數(shù)位三部分組成。

符號(hào)位是1bit,0代表整數(shù),1代表負(fù)數(shù),指數(shù)位決定數(shù)值的量級(jí),尾數(shù)位決定數(shù)值精度。

64位的說明如下:

wKgZPGlokXGADR4xAAp3788EyCE054.png

??

?

其中11和52的設(shè)計(jì)是在平衡了很多需求后得到的最佳實(shí)踐。

Double (64位) = 符號(hào)位(1位) + 指數(shù)位(11位) + 尾數(shù)位(52位)

示例:455058496.0 的IEEE 754表示
原始值:455058496.0
二進(jìn)制科學(xué)計(jì)數(shù)法:1.0101100001110000000000000000000 × 2^28

符號(hào)位:0 (正數(shù))
指數(shù)位:28 + 1023(偏移量) = 1051 = 10000011011?
尾數(shù)位:0101100001110000000000000000000... (52位)

完整64位表示:
0 10000011011 0101100001110000000000000000000000000000000000000000

2.3.2 數(shù)值超過10^7或者小于10^-3會(huì)發(fā)生什么

其實(shí)什么也不會(huì)發(fā)生,只是基于如下原因綜合權(quán)衡的結(jié)果。

1、認(rèn)知科學(xué)依據(jù)

?人類短期記憶的數(shù)字處理能力約為7±2位

?超過7位的整數(shù)部分難以快速理解

?科學(xué)計(jì)數(shù)法提供更好的可讀性

2、精度保持考慮

?10^7 = 10,000,000 (8位數(shù)字)

?超過此值,普通格式會(huì)顯得冗長

?10^-3 = 0.001,更小的數(shù)用科學(xué)計(jì)數(shù)法更清晰

3、歷史兼容性

?這個(gè)標(biāo)準(zhǔn)在多種編程語言中被采用

?保持了與C語言printf的兼容性

?符合IEEE 754標(biāo)準(zhǔn)的建議

這也就是為什么這個(gè)這個(gè)范圍內(nèi)的數(shù)要表示成科學(xué)計(jì)數(shù)法了。

2.3.3 源碼探究

1、調(diào)用鏈路

根據(jù)源碼,可以看到Double.toString()方法的調(diào)用鏈?zhǔn)牵?/p>

wKgZO2lokXKAWgnKAAYbGvFATtg163.png

??

分流是否使用科學(xué)計(jì)數(shù)法的核心代碼toChars的代碼如下:

/*
 * Formats the decimal f 10^e.
 */
private int toChars(byte[] str, int index, long f, int e, FormattedFPDecimal fd) {
    /*
     * For details not discussed here see section 10 of [1].
     *
     * Determine len such that
     *     10^(len-1) <= f < 10^len
     */
    int len = flog10pow2(Long.SIZE - numberOfLeadingZeros(f));
    if (f >= pow10(len)) {
        len += 1;
    }
    if (fd != null) {
        fd.set(f, e, len);
        return index;
    }

    /*
     * Let fp and ep be the original f and e, respectively.
     * Transform f and e to ensure
     *     10^(H-1) <= f < 10^H
     *     fp 10^ep = f 10^(e-H) = 0.f 10^e
     */
    f *= pow10(H - len);
    e += len;

    /*
     * The toChars?() methods perform left-to-right digits extraction
     * using ints, provided that the arguments are limited to 8 digits.
     * Therefore, split the H = 17 digits of f into:
     *     h = the most significant digit of f
     *     m = the next 8 most significant digits of f
     *     l = the last 8, least significant digits of f
     *
     * For n = 17, m = 8 the table in section 10 of [1] shows
     *     floor(f / 10^8) = floor(193_428_131_138_340_668 f / 2^84) =
     *     floor(floor(193_428_131_138_340_668 f / 2^64) / 2^20)
     * and for n = 9, m = 8
     *     floor(hm / 10^8) = floor(1_441_151_881 hm / 2^57)
     */
    long hm = multiplyHigh(f, 193_428_131_138_340_668L) >>> 20;
    int l = (int) (f - 100_000_000L * hm);
    int h = (int) (hm * 1_441_151_881L >>> 57);
    int m = (int) (hm - 100_000_000 * h);

    if (0 < e && e <= 7) {
        return toChars1(str, index, h, m, l, e);
    }
    if (-3 < e && e <= 0) {
        return toChars2(str, index, h, m, l, e);
    }
    return toChars3(str, index, h, m, l, e);
}

代碼地址: https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/jdk/internal/math/DoubleToDecimal.java

可以看到使用科學(xué)計(jì)數(shù)法處理的核心代碼是toChars3,代碼如下:

private int toChars3(byte[] str, int index, int h, int m, int l, int e) {
    /* -3 >= e | e > 7: computerized scientific notation */
    index = putDigit(str, index, h);
    index = putChar(str, index, '.');
    index = put8Digits(str, index, m);
    index = lowDigits(str, index, l);
    return exponent(str, index, e - 1);
}

2、toChars3()的參數(shù)含義

?byte[] str: 輸出字符串的字節(jié)數(shù)組

?int index: 當(dāng)前寫入位置的索引

?int h: 最高位數(shù)字 (0-9)

?int m: 中間8位數(shù)字 (00000000-99999999)

?int l: 低位數(shù)字 (用于精度控制)

?int e: 調(diào)整后的十進(jìn)制指數(shù)值

3、 toChars3()的數(shù)據(jù)流處理步驟

1.putDigit(str, index, h) → 寫入最高位數(shù)字

2.putChar(str, index, '.') → 寫入小數(shù)點(diǎn)

3.put8Digits(str, index, m) → 寫入中間8位數(shù)字

4.lowDigits(str, index, l) → 寫入低位數(shù)字(去除尾隨零)

5.exponent(str, index, e-1) → 寫入指數(shù)部分

為什么使用 e-1?

原因:已經(jīng)放置了一位數(shù)字在小數(shù)點(diǎn)前
目的:調(diào)整指數(shù)以保持?jǐn)?shù)值不變
示例:4.55058496E7 表示 4.55058496 × 10^7

4、exponent()分析

標(biāo)準(zhǔn)科學(xué)計(jì)數(shù)法:a.bcd × 10^n
約束條件:1 ≤ a < 10(小數(shù)點(diǎn)前只有一位非零數(shù)字)
private int exponent(byte[] str, int index, int exp) {
    str[index++] = (byte) 'E';  // 寫入字符 'E'
    if (exp < 0) {
        str[index++] = (byte) '-';  // 負(fù)指數(shù)寫入 '-'
        exp = -exp;  // 轉(zhuǎn)為正數(shù)處理
    }
    if (exp >= 100) {
        str[index++] = (byte) ('0' + exp / 100);  // 百位
        exp %= 100;
    }
    if (exp >= 10) {
        str[index++] = (byte) ('0' + exp / 10);   // 十位
        exp %= 10;
    }
    str[index++] = (byte) ('0' + exp);           // 個(gè)位
    return index;
}

?輸入?yún)?shù): byte[] str(輸出緩沖區(qū))、int index(寫入位置)、int exp(指數(shù)值)

?核心功能: 將指數(shù)值格式化為字符串并寫入字節(jié)數(shù)組

?處理邏輯: 優(yōu)化處理1位、2位、3位數(shù)的指數(shù)

1. 寫入 'E'
2. 處理負(fù)號(hào)(如果 exp < 0)
3. 處理百位(如果 exp >= 100)
4. 處理十位(如果 exp >= 10)
5. 處理個(gè)位(必須)

?返回值: 更新后的索引位置

例子:

1. 原始數(shù)值: 45505849.6
2. 精確指數(shù): 7.658067227112319
3. 調(diào)整后指數(shù): 7.658 - 1 = 6.658
4. 四舍五入: 7
5. exponent方法輸入: exp = 7
6. 執(zhí)行步驟:
   - 寫入 'E' → index = 1
   - exp = 7 < 10,跳過百位和十位
   - 寫入個(gè)位 '7' → index = 2
7. 輸出: "E7"
8. 完整結(jié)果: "4.55058496E7"

根據(jù)源代碼的邏輯簡化了一版如下:

https://coding.jd.com/newJavaEngineerOrientation/Double2String.git

三、解決方案

3.1 BigDecimal 精準(zhǔn)控制

new BigDecimal(doubleValue).setScale(2, RoundingMode.HALF_UP).toPlainString() 

3.2 DecimalFormat 格式化

new DecimalFormat("#0.00").format(doubleValue) // 強(qiáng)制保留兩位小數(shù)  

四、總結(jié)

Double 數(shù)值的字符串格式化規(guī)則(如 Double.toString())遵循:

?普通格式(Plain):當(dāng)數(shù)值的指數(shù)范圍在 [-3, 7) 時(shí)(即絕對(duì)值在 [10^-3, 10^7) 之間),直接顯示小數(shù)形式(如 0.001 或 123456.0)。

?科學(xué)計(jì)數(shù)法(Scientific):當(dāng)指數(shù)范圍超出 [-3, 7)(如 0.000999 或 10000000.0),顯示為科學(xué)計(jì)數(shù)法(如 9.99e-4 或 1.0e7)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Doubler
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    7353
  • string
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    5059
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C陷阱與缺陷

    程序員繞過編程過程陷阱和障礙。C陷阱與缺陷共分為8章,分別從詞法分析、語法語義、連接、庫函數(shù)、預(yù)處理器、可移植性缺陷等幾個(gè)方面分析了C編程可能遇到的問題。最后,作者用一章的篇幅給
    發(fā)表于 09-25 09:51

    科學(xué)計(jì)數(shù)如何轉(zhuǎn)化為數(shù)字。

    LABVIWE如何將科學(xué)計(jì)數(shù)1.3e5,1.6e7,2.7e3,.......,nen轉(zhuǎn)化為數(shù)字?轉(zhuǎn)化的數(shù)字是分開獨(dú)立的數(shù)字。求大俠指點(diǎn),謝謝!
    發(fā)表于 12-28 22:40

    科學(xué)計(jì)數(shù)轉(zhuǎn)換

    `如圖所示我的串口通信返回值是以ASCII字符串的科學(xué)計(jì)數(shù)法數(shù)值,本人想轉(zhuǎn)換成浮點(diǎn)型的數(shù)值,方便接下來的工作。謝謝!`
    發(fā)表于 08-25 21:26

    long double to string函數(shù)找不到本地支持

    為long double時(shí),但沒有任何正式文檔,我不能接受它作為一個(gè)可行的解決方案。有人遇到過支持長雙倍的函數(shù),并將其轉(zhuǎn)換成一組ASCII字符,反之亦然?謝謝! 以上來自于百度翻譯 以下為原文 Hi,I
    發(fā)表于 11-02 14:58

    IAR debug查看浮點(diǎn)類型變量怎么不用科學(xué)計(jì)數(shù)顯示呢?

    如圖所示的浮點(diǎn)數(shù),科學(xué)計(jì)數(shù)顯示的變量看著難受,不夠直觀有沒有哪個(gè)設(shè)置可以改變一下的?我自己找了一下沒有找到相關(guān)選項(xiàng).
    發(fā)表于 04-14 10:02

    計(jì)數(shù)器(反饋歸零

    計(jì)數(shù)器(反饋歸零
    發(fā)表于 03-18 20:09 ?5160次閱讀
    <b class='flag-5'>計(jì)數(shù)</b>器(反饋歸零<b class='flag-5'>法</b>)

    氣相色譜在環(huán)境科學(xué)的應(yīng)用

    氣相色譜在環(huán)境科學(xué)的應(yīng)用 ⑴大氣微量-氧化碳的分析汽車尾氣中含有一氧化碳,工業(yè)鍋爐和家用煤爐燃燒不完全放出
    發(fā)表于 12-25 16:54 ?1125次閱讀

    采用歸零的N進(jìn)制計(jì)數(shù)器原理

    計(jì)數(shù)器是一種重要的時(shí)序邏輯電路,廣泛應(yīng)用于各類數(shù)字系統(tǒng)。介紹以集成計(jì)數(shù)器74LS161和74LS160為基礎(chǔ),用歸零設(shè)計(jì)N進(jìn)制計(jì)數(shù)器的原
    發(fā)表于 03-20 10:21 ?95次下載
    采用歸零<b class='flag-5'>法</b>的N進(jìn)制<b class='flag-5'>計(jì)數(shù)</b>器原理

    javastring不可變的原因

    ABCabc, 然后又讓s的值為123456。 從打印結(jié)果可以看出,s的值確實(shí)改變了。那么怎么還說String對(duì)象是不可變的呢? 其實(shí)這里存在一個(gè)誤區(qū): s只是一個(gè)String對(duì)象的引用,并不是對(duì)象本身。對(duì)象在內(nèi)存是一塊內(nèi)存區(qū)
    發(fā)表于 09-27 13:24 ?0次下載
    java<b class='flag-5'>中</b><b class='flag-5'>string</b>不可變的原因

    基于隱蔽信息存儲(chǔ)分布的隱蔽信道構(gòu)造方法

    針對(duì)現(xiàn)有的長度式隱蔽信道在信道熵和長度分布特征與合法信道有差異的問題,提出一種基于隱蔽信息存儲(chǔ)分布的隱蔽信道構(gòu)造方法。將不同編碼方式下的隱蔽
    發(fā)表于 01-25 15:37 ?0次下載

    如何使用C語言實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)容的string

    眾所周知,C++ string使用比較方便,關(guān)于C++ string源碼實(shí)現(xiàn)可以看我的這篇文章:源碼分析C++的string的實(shí)現(xiàn)
    的頭像 發(fā)表于 10-25 10:59 ?2691次閱讀

    UTF8String是如何編碼的?

    UniversalString和UTF8String 都支持完全相同的字符集,前64K 字符都是BMPString 的字符集。請(qǐng)注意,BMPString 的前128 個(gè)字符與IA5String
    的頭像 發(fā)表于 08-26 09:55 ?2898次閱讀
    UTF8<b class='flag-5'>String</b>是如何編碼的?

    bigdecimal轉(zhuǎn)string類型

    情況下,我們可能需要將BigDecimal對(duì)象轉(zhuǎn)換為String類型,例如在進(jìn)行數(shù)據(jù)的持久化、傳輸、展示等場(chǎng)景。下面將詳細(xì)介紹如何在Java中將BigDecimal轉(zhuǎn)換為String
    的頭像 發(fā)表于 11-30 11:09 ?7524次閱讀

    bigdecimal轉(zhuǎn)string類型避免空指針

    在Java,BigDecimal是用于處理高精度數(shù)字計(jì)算的類。它提供了一種有效的方法來避免使用浮點(diǎn)數(shù)的精確度損失問題。然而,在將BigDecimal對(duì)象轉(zhuǎn)換為String類型時(shí),需要特別小心以避
    的頭像 發(fā)表于 11-30 11:12 ?4119次閱讀

    FPGA DSP模塊使用的十大關(guān)鍵陷阱

    FPGA 芯片中DSP(數(shù)字信號(hào)處理)硬核是高性能計(jì)算的核心資源,但使用不當(dāng)會(huì)引入隱蔽性極強(qiáng)的“坑”。這些坑不僅影響性能和精度,甚至?xí)?dǎo)致功能錯(cuò)誤。以下是總結(jié)了十大關(guān)鍵陷阱及其解決方案,分為 功能正確性、性能優(yōu)化、系統(tǒng)集成 三個(gè)層面。
    的頭像 發(fā)表于 01-13 15:18 ?396次閱讀