背景

昨天,关于价格详情接口又来了一个小需求,而且有点特别。价格显示:改为保留两位小数,没错,就是保留两位小数。大家是不是想说这没啥特别的。。。数据库都有函数搞定了。例如四舍五入的ROUND(x,d),直接截取的TRUNCATE(x,d),还可以利用类型转换CONVERT(value,type)等等。但是,上面的都不能满足这个保留两位的特殊需求,我们来看一下究竟怎么保留两位:小数点两位后,只要大于0的,就直接进一。例如:1.8100 -> 1.81,1.8102 -> 1.82

分析

那么,这需要怎么解决呢,数据库好像确实没函数来这么弄了,那么只能在sql里判断,或者java里判断了。因为这要快速搞定,就直接在sql里入手了。其实也很简单:如果原数比直接截取两位后的数大,表示两位后还有数,然后就直接+0.01。 sql这么改:

if(price > TRUNCATE(price,2),TRUNCATE(price,2)+0.01,TRUNCATE(price,2)) AS elecPrice

优化-编写自定义函数

回头一想,sql好像写得有点僵硬,如果有多个字段需要这样显示,那岂不是每个都要写这么长一串。又如果不是保留两位,而是保留三位,那么岂不是之前的sql又得全部改一遍。。这么一想,我突然就很头疼。程序员嘛,还是得有点追求,不能只为解决问题,一定要自己思考一种比较好的方案:通用的,简洁的。最后,自己编写了一个通用的函数,可以自定义位数,然后返回处理后的数字。关于MySql如何编写自定义函数,大家可以自己百度一下,下面直接上函数:

drop FUNCTION if exists ENTER_ONE;

create function ENTER_ONE(origin decimal(5,4),digit INT) returns decimal(3,2)

begin

DECLARE result FLOAT;

IF origin > TRUNCATE(origin,digit) THEN

set result = TRUNCATE(origin,digit)+1/POWER(10,digit);

ELSE

set result = TRUNCATE(origin,digit);

END IF;

return result;

end;

下面简单解释一下: 首先,调用此函数得传入两个参数,第一个是要处理的浮点数origin,第二个是要保留的位数digit。 然后,定义好结果result后,开始进行逻辑判断。当然了,还是上面的配方,原数和直接截取digit位后的数进行比较,如果大:则直接截取digit为后的数加上1除去10的digit次方。否则,直接截取digit为数。 最后返回结果result即可。 sql就变得想当简单了:

ENTER_ONE(price,2) as elecPrice

总结

作为程序员,一定要有善于思考,善于总结的能力和习惯,每次解决一个问题,我们要判断这能否做成一个通用的组件或者工具类,方便以后有此需求的小伙伴!

mysql函数保留小数_MySql自定义函数-关于保留小数位的特殊需求相关推荐

  1. rds支持mysql自带函数吗_MySQL自定义函数(CREATE FUNCTION)

    在使用MySQL的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数.自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和过程式 ...

  2. mysql 自定义函数报错_Mysql自定义函数报错解决方法

    [最近研究mysql数据库性能的相关问题,为了对比不同版本之间的差别.笔者找了一台测试服务器升级了该服务器的mysql数据库进行测试,在升级mysql过程中遇到了一些问题并将其 1.在MySql中创建 ...

  3. mysql 自定义函数报错_Mysql自定义函数报错解决方法 | 学步园

    1.在MySql中创建自定义函数报错信息如下: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READ ...

  4. mysql 获取子分类_MySQL 自定义函数获取一个分类的无限级子分类

    本方法不易维护,建议取出数据,在程序中递归,例如 https://javascript.net.cn/article?id=654 代码如下:delimiter / DROP FUNCTION IF ...

  5. MySQL 自定义函数设置执行时间_mysql自定义函数计算时间段内的工作日(支持跨年)...

    ① 同一年的情况下计算工作日函数 CREATE DEFINER=`root`@`%` FUNCTION `WORKDAYSONEYEAR`(`datefrom` datetime,`dateto` d ...

  6. mysql 怎么将0女1男_MySQL自定义函数(0显示为女1显示为男

    MySQL自定义函数用法详解 自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL. 所 ...

  7. mysql支持自定义函数_MySQL 自定义函数

    自定义函数概念 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同. 自定义函数的两个必要条件: 参数 返回值 (只能有一个) ...

  8. mysql 自定义函数实例_mysql自定义函数原理与用法实例分析

    本文实例讲述了mysql自定义函数原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是函数 函数的创建 函数的调用 函数的查看 函数的修改 函数的删除 首发日期:2018-04-18 什么 ...

  9. MySQL1为男_MySQL自定义函数(0显示为女1显示为男

    MySQL自定义函数用法详解 自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL. 所 ...

最新文章

  1. Python 计算Mesh顶点法向量
  2. SQL-2 查找入职员工时间排名倒数第三的员工所有信息
  3. android 半透明色值_Android 色值转换成透明度色值
  4. python函数格式化_Python通过format函数格式化显示值
  5. 如何用java输出方格_第三章 Java类基础知识作业之(输出5*5数字方格,打印星塔)...
  6. Teamcenter 入门开发系列问答(3)
  7. 如何在html创建js对象,在js中使用createElement创建HTML对象和元素
  8. 1. 解决问题的能力
  9. 经纬度(度十进制分)—— 度分秒 转换
  10. RS485收发的3种典型电路-重点-自动收发电路
  11. Python opencv局部直方图均衡增强
  12. 记录一个找直线三等分点的方法及其证明
  13. OSChina 周二乱弹 —— 怎么让可爱的女孩子吃药
  14. cad2006激活未找到html文件,[转载]AutoCAD2006启动时提示“许可证系统出现问题”解决方法...
  15. linux系统带界面,linux系统界面详情介绍
  16. SAP LVC_FIELDCATALOG_MERGE 根据表结构生成 fieldcat
  17. 科罗拉多州立大学计算机科学,2020年科罗拉多州立大学排名TFE Times美国最佳计算机科学硕士专业排名第81...
  18. uni-app 190扫一扫加入群聊功能(二)
  19. luajit的字节码
  20. GGNN:GATED GRAPH SEQUENCE NEURAL NETWORKS

热门文章

  1. C#使用Xamarin开发可移植移动应用进阶篇(9.混淆代码,防止反编译)
  2. ASP.NET Core WebListener 服务器
  3. html中图片的属性优化,Html标签元素在SEO中的优化方式(二)
  4. mysql数据表设计要点以及快门
  5. MicroStation V8i简体中文版中文字体乱码解决办法
  6. Android之BaseQuickAdapter(3.0.4版本)给子view添加点击事件(helper.addOnClickListener(view))的函数没了
  7. Android之什么时候调用onSaveInstance方法的时候(为什么按Home键盘会调用,按Back不调用)
  8. linux c之通过popen和pclose函数创建管道执行shell 运行命令使用总结
  9. char添加一个字符_给你五十行代码把图片变成字符画!程序:太多了,一半都用不完...
  10. 安卓效率微商_微商人脉通app下载-微商人脉通 安卓版v2.5.5-PC6安卓网