当前位置: 首页 > news >正文

前端百分比展示导致后端 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.dtcms.com/a/318879.html

相关文章:

  • 多账号管理方案:解析一款免Root的App分身工具
  • 【RabbitMQ面试精讲 Day 13】HAProxy与负载均衡配置
  • HTTP 协议升级(HTTP Upgrade)机制
  • winform中的listbox实现拖拽功能
  • 基于ubuntu搭建gitlab
  • KDE Connect
  • 一篇文章入门TCP与UDP(保姆级别)
  • 02电气设计-安全继电器电路设计(让电路等级达到P4的安全等级)
  • C语言strncmp函数详解:安全比较字符串的实用工具
  • 合约收款方式,转账与问题安全
  • 怎么进行专项分析项目?
  • 上证50期权持仓明细在哪里查询?
  • C语言(08)——整数浮点数在内存中的存储
  • LINUX-批量文件管理及vim文件编辑器
  • 浅析 Berachain v2 ,对原有 PoL 机制进行了哪些升级?
  • AutoMQ-Kafka的替代方案实战
  • JAVA第六学:数组的使用
  • 【C++】哈希表原理与实现详解
  • 基于langchain的两个实际应用:[MCP多服务器聊天系统]和[解析PDF文档的RAG问答]
  • 智能制造的中枢神经工控机在自动化产线中的关键角色
  • 行业应用案例:MCP在不同垂直领域的落地实践
  • 二叉树算法之【中序遍历】
  • OpenAI重磅发布:GPT最新开源大模型gpt-oss系列全面解析
  • SpringBoot请求重定向目标地址不正确问题分析排查
  • 六类注定烂尾的甲方软件外包必看!这类甲方不要理-优雅草卓伊凡
  • 上门家教 app 用户端系统模块设计
  • 区块链简介
  • C++位图(Bitmap)与布隆过滤器(Bloom Filter)详解及海量数据处理应用
  • java excel转图片常用的几种方法
  • 分布式接口限流与防重复提交实现方案