前端百分比展示導致后端 BigDecimal 轉換異常的排查與解決

在開發一個訂單預算系統時,我們需要在前端動態計算「利潤率差額」,格式為百分比(帶 % 符號)保留4位小數,但實際傳給后端時必須是純數字(浮點數),以便后端正常以 BigDecimal 類型接收并處理。

然而,我們在某次提交數據到后端時,系統直接拋出以下異常:

告訴我們傳遞的是null ,告訴我無法轉換

問題分析

前端相關代碼如下所示:

// 利潤率差額 profitRateDiff(百分比 + % 符號,保留4位小數)
const orderRevenueActual = Number(this.costData.orderRevenueActual) || 0
let profitRateDiff = '0.0000%' // 👈 注意這里是字符串!
if (orderRevenueActual !== 0) {const rate = (netProfitDiff / orderRevenueActual) * 100profitRateDiff = `${rate.toFixed(4)}%`
}
this.$set(this.costData, 'profitRateDiff', profitRateDiff)

這段代碼表面上看沒毛病,邏輯嚴謹,結果也是正確顯示出“28.4212%”這樣格式化的字符串。

然而,致命問題在于:

👉 profitRateDiff 被直接設置為 字符串類型(帶 %)
👉 最終提交接口時 this.costData.profitRateDiff 仍是字符串 "28.4212%"
👉 后端嘗試將 "28.4212%" 轉換為 BigDecimal,但 % 字符不是合法數字格式
👉 報錯!

正確寫法

1. 存值用數字,不要包含 % 字符,如果需要可以重新寫個方法轉過去

const orderRevenueActual = Number(this.costData.orderRevenueActual) || 0
let profitRateDiff = 0 // 👈 注意初始化為數字
if (orderRevenueActual !== 0) {const rate = (netProfitDiff / orderRevenueActual) * 100profitRateDiff = +rate.toFixed(4) // 強轉為小數數字
}
this.$set(this.costData, 'profitRateDiff', profitRateDiff) // 仍是純數字

比如:

methods: {formatPercent(value) {if (value == null || isNaN(value)) return '0.0000%'return value.toFixed(4) + '%'}
}

最佳實踐總結

需求實現方式
存儲使用數字 28.4212
展示格式化顯示為 28.4212%
提交后端保證 costData.profitRateDiff 是數字類型

寫在最后

這次坑給我們的經驗是:

  • 前端顯示歸顯示,存儲歸存儲,一定要分離

  • 在與后端協作中,要嚴格約定字段類型:數字就是數字、字符串就是字符串

  • 對格式化展示的字段,盡量使用計算屬性、方法或者過濾器處理,而不要將格式化后的值直接賦值到數據模型中

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94872.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文學習21:Pyramid Scene Parsing Network

代碼來源 GitHub - hszhao/PSPNet: Pyramid Scene Parsing Network, CVPR2017. 模塊作用 對于不受限制的開放詞匯和多樣化場景,場景解析極具挑戰性。本文結合金字塔池化模塊和提出的金字塔場景解析網絡(PSPNet),利用基于不同區…

從手工編碼到自動化:APP開發的效率革命

摘要**熬夜敲代碼、反復調試改 Bug,項目進度卻依舊緩慢,這是無數 APP 開發者在手工編碼時代的真實寫照。更讓人崩潰的是,即便投入大量時間精力,最終交付的 APP 還可能存在各種問題。難道 APP 開發注定如此艱辛?不&…

數據結構5.(哈希表及數據的排序和查找算法)

1.哈希算法將數據通過哈希算法映射成一個鍵值,存取都在同一位置實現數據的高效存儲和查找,將時間復雜度盡可能降低至O(1),同樣的參數返回同樣的整數,不同的參數返回不同的整數2. 哈希碰撞多個數據通過哈希算法得到的鍵值相同&…

數據結構Java--7

排序排序就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作排序的穩定性假若有以下數組,數組中存在兩個5,這里區分標記如果排序之后,紅色的5仍然在藍色的5前面,我們就認為該排序…

《Node.js與 Elasticsearch的全文搜索架構解析》

文檔數量跨越百萬級門檻,傳統數據庫的查詢方式就像在沒有索引的圖書館里逐架翻書,不僅耗費時間,更難以捕捉文字背后的深層關聯。此時,由Node.js與Elasticsearch共同構建的全文搜索系統,便成了梳理信息脈絡的無形之手——它能在毫秒之間,從海量文檔中識別用戶的真實意圖,…

Python人工智能matplotlib中markers屬性介紹

在 Matplotlib 中&#xff0c;marker 用于標記數據點&#xff0c;可通過多種參數自定義樣式。以下是詳細說明及示例&#xff1a; 1. 基礎設置常用 marker 類型&#xff1a; . : 點 , : 像素 o : 圓圈 v : 下三角形 ^ : 上三角形 < : 左三角形 >…

【Mac】MLX:Lora微調工作流

本文詳細介紹如何在Mac電腦上使用Apple的MLX框架&#xff0c;通過LoRA&#xff08;低秩適配&#xff09;技術對大語言模型&#xff08;如Qwen3-4B-Instruct&#xff09;進行微調。以下流程適用于8月9日的Mac mini M4 16GB&#xff0c;涵蓋模型獲取、數據準備、微調、運行及模型…

潤乾報表、帆軟報表的開源替代品—JimuReport(積木報表)

國產報表工具選型指南&#xff1a;潤乾報表 vs 積木報表&#xff08;JimuReport&#xff09; 如果你在尋找潤乾報表、帆軟報表的替代產品&#xff0c;JimuReport&#xff08;積木報表&#xff09;是一個值得考慮的選擇。它不僅功能全面&#xff0c;而且操作簡單&#xff0c;非常…

Tiger任務管理系統-12

今天整了一個老虎網站介紹這套任務管理開源系統&#xff0c;防止鏈接丟失&#xff0c;體驗了一把AI編程&#xff0c;雖說確實省了很多事&#xff0c;但源碼確實不敢恭維&#xff0c;尤其是修改的時候&#xff0c;真心累&#xff0c;所以還是要自己掌握核心&#xff0c;AI一時爽…

智慧農業-無人機視角莊稼倒伏農作物倒伏識別分割數據集labelme格式541張1類別

數據集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;僅僅包含jpg圖片和對應的json文件)圖片數量(jpg文件個數)&#xff1a;541標注數量(json文件個數)&#xff1a;541標注類別數&#xff1a;1標注類別名稱:["fall"]每個類別標注的框數&#xff1a;fall co…

電子電氣架構 --- 電氣/電子架構遷移已拉開帷幕

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

PPT漏斗圖,讓數據更美觀!

PPT漏斗圖制作全攻略&#xff1a;從入門到精通的實用技巧和模板推薦 無論你是職場新人還是PPT老手&#xff0c;在做數據報告或者展示項目進度的時候&#xff0c;你總覺得圖表太單調&#xff0c;數據太復雜嗎&#xff1f;這時&#xff0c;一張邏輯清晰、結構簡單的漏斗圖&#…

深入解析C++流運算符(>>和<<)重載:為何必須使用全局函數與友元機制

目錄 一、為什么需要重載為全局函數 成員函數重載的問題 全局函數的優勢 二、實現細節 1、輸出運算符<<的重載 關鍵部分詳解 1. 類定義部分 2. 運算符重載實現 3. main函數中的使用 為什么這樣設計&#xff1f; 執行流程 輸出結果 2、輸入運算符>>的重…

ENS-317 Modbus TCP / 通用模式網關

在工業自動化的復雜網絡中&#xff0c;以太網設備與串口設備的 “語言不通” 常常成為數據流轉的阻礙。上海泗博自動化推出的 ENS-317 Modbus TCP / 通用模式網關&#xff0c;以強大的協議轉換能力、靈活的配置方式和工業級可靠性&#xff0c;為設備互聯提供一站式解決方案&…

AcWing 6478. 誰進線下了?III

原題鏈接 6478. 誰進線下了&#xff1f;III - AcWing題庫 這是一道睿抗&#xff08;省賽&#xff09;題 一開始睿抗是啥都不知道 然后一看是省賽嚇得我不輕 但讀完題簡簡單單 一道很水的模擬題&#xff08;誰能解釋一下睿抗啥意思&#xff09; 一起開康康 題目 Xepa Le…

openpnp - 不連接設備,只大概測試一下攝像頭是否好使

文章目錄openpnp - 不連接設備&#xff0c;只大概測試一下攝像頭是否好使概述筆記備注備注ENDopenpnp - 不連接設備&#xff0c;只大概測試一下攝像頭是否好使 概述 頂部相機攝像頭在拆裝過程中&#xff0c;可能被手上的靜電打壞了。 現在和電腦連接是正常的&#xff0c;但是…

使用Python提取PDF大綱(書簽)完整指南

&#x1f50d; 一、PDF大綱簡介&#x1f4cc; ?PDF大綱&#xff08;Outline&#xff09;?? 是PDF文檔中的導航結構&#xff0c;通常顯示在閱讀器的側邊欄中&#xff0c;方便用戶快速跳轉到文檔的不同部分。大綱通常以層級結構組織&#xff0c;包含標題和對應的頁面位置。本文…

第39周——訓練自己的數據集

目錄 1. 下載數據 2. 配置開發環境 3. 預處理數據 &#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 1. 下載數據 百度網盤&#xff1a;百度網盤 請輸入提取碼 壓縮文件中有兩個文件夾&#xff0c;分別是Annot…

CentOS7中Docker的安裝與卸載

CentOS7 從零開始:Docker 安裝與卸載全指南(新手友好版) 作為一名剛接觸 Linux 和容器技術的新手,你是否曾在安裝 Docker 時被各種命令和報錯搞得一頭霧水?比如執行 yum install docker 時提示 “倉庫不存在”,或者啟動 Docker 后用 docker version 只顯示 client 不顯示…

解決MinIO上傳圖片后返回URL無法訪問的問題

一、問題現象 上傳接口返回了文件的訪問路徑&#xff0c;比如&#xff1a; http://127.0.0.1:9005/lease/20250808/xxx-uuid.png但是用瀏覽器直接打開該地址卻顯示權限拒絕,前端也訪問不到:二、問題原因分析 桶權限設置不正確: MinIO默認桶權限是私有的&#xff0c;即使瀏覽器能…