插入数据库的数值大小和我们代码输出的不一样---类型错误记录

本文探讨了在代码中使用浮点数时遇到的精度问题,特别是在将数据插入数据库时,由于数据类型不匹配导致的数值变化。通过对比float和varchar类型,解释了问题的根源,并提供了解决方案,即确保数据类型的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子

例如代码输出的money值是1.4和0.66    ,但插入数据库的时候却变了1.4000000000000000001,和0.6599999999999

 原因

出现该情况,肯定就是数据类型出问题了,我检查发现,图1的money数据类型是float,但我数据库的money字段数据类型是varchar,原因这是这两类型不一致导致

解决

修改了插入数据类型和数据库一样,就解决了 

### 解决 MyBatis SQL Viewer 参数格式一致性 为了确保 MyBatis SQL Viewer 中的参数格式与从请求(req)中获取的数据格式保持一致,可以采取以下几个措施: #### 1. 使用统一的数据类型转换工具 通过引入数据类型转换工具来标准化输入参数的格式。这有助于减少因同来源的数据而导致的格式差异。 ```java public class DataFormatter { public static String formatParameter(String param) { // 统一字符串格式化逻辑 return param.trim(); } public static Integer formatInteger(Integer value) { // 处理整数类型的特殊字符或异常情况 if (value == null || value.toString().isEmpty()) { return 0; } return value; } } ``` 对于上述提到的更新简历状态的操作[^1],可以通过此类方法预处理传入的 `#{changeValue}` `#{id}` 参数。 #### 2. 配置 MyBatis 日志级别 适当调整 MyBatis 的日志配置,使其能够更清晰地记录执行过程中的 SQL 及其绑定变量的真实。通常情况下,在开发环境中设置较高的日志等级可以帮助调试这类问题。 ```xml <configuration> <!-- 设置mybatis的日志实现 --> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!-- 或者指定具体的包名路径下的mapper接口采用DEBUG级别的日志输出 --> <mappers> <package name="com.example.mapper"/> </mappers> </configuration> ``` 当遇到类似回收站功能时,详细的日志信息能帮助确认最终传递给数据库的是什么形式的数据。 #### 3. 应用层面上做验证清理工作 在应用程序层面增加必要的校验机制,比如去除多余空白、检查数值范围等操作后再提交至持久层。这样仅提高了安全性也减少了潜在的格式冲突风险。 例如针对错误日志表结构设计[^3],如果要插入新的记录前应该先对各个字段的内容进行合法性检测并按照预期的方式整理好再存入数据库。 #### 4. 利用插件增强控制力 考虑利用第三方插件或者自定义拦截器来捕获所有的查询语句及其对应的参数映射关系,并对其进行二次加工使得两者更加匹配。 如 Nginx 中 location 块用于精确匹配 URL 请求模式[^4]一样,MyBatis 插件也可以用来精细化管理动态构建出来的 SQL 片段以及它们所关联的具体业务对象属性之间的对应规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值