商业网站建设者,推广app拿返佣的平台,西安企业门户网站建设,企业网站制作优化背景昨天#xff0c;关于价格详情接口又来了一个小需求#xff0c;而且有点特别。价格显示#xff1a;改为保留两位小数#xff0c;没错#xff0c;就是保留两位小数。大家是不是想说这没啥特别的。。。数据库都有函数搞定了。例如四舍五入的ROUND(x,d)#xff0c;直接截…背景昨天关于价格详情接口又来了一个小需求而且有点特别。价格显示改为保留两位小数没错就是保留两位小数。大家是不是想说这没啥特别的。。。数据库都有函数搞定了。例如四舍五入的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)beginDECLARE result FLOAT;IF origin TRUNCATE(origin,digit) THENset result TRUNCATE(origin,digit)1/POWER(10,digit);ELSEset 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总结作为程序员一定要有善于思考善于总结的能力和习惯每次解决一个问题我们要判断这能否做成一个通用的组件或者工具类方便以后有此需求的小伙伴