最近在做一个模仿excel功能的在线项目。其中有一个功能,数据列表中的数据,到了最后一列都要进行总计。这本来没什么难度。直接从数据库取出数据后,进行foreach相加就行 了。这是如此的简单,以至于用了不到五分钟写就了功能,根本没把脑子带在身上。

两天后的一次不经意的浏览页面,发现统计的结果不对。于是左思右想,竟然没有发现我的计算有什么逻辑上的bug。但没有bug,最后的计算结果不对,肯定是哪里有问题,只是我现在没有发现而已。

后来反复输出原始数据,竟然发现,从数据库取出的数据是经过number_format处理过的结果,千分位上加上了逗号,已经变成了一个字符串。相加的时候我还使用了强制类型转换(int)使数字字符串变成int类型,方便相加。

明白的问题之后,就好采取方法修复bug了。既然是多了一个逗号,那么我们把这个逗号都去掉就好了吧。于是用了str_replace函数,把逗号换成""空字符串。这样自然数据转成了字符串数字,然后再强制转换城int类型。

最后统计的结果算出来了,数据是很长的一串。非常不便于阅读。于是还要把最后的统计结果还要用number_format来再次千分位加逗号,让统计数据最好让用户理解。


进入公司即将三个月,也见了大牛们写的代码。结合自己的性格以及习惯,谈谈理解。

首先程序员不是码农,每天从事的工作,不是在和一堆无意义的字符在打交道,程序的工作更像是作家,用文字去写一个故事。

代码的整齐与否,至关最要,我认为在所有要素里,代码是否整齐,是最最重要的。

一篇整整齐齐的代码,先不从理解的角度去看。舒适的排版,得当的留白,清晰明了的注释,会让后续看代码的人感觉到这是一篇用心写作的代码,浮躁的心情也会慢慢沉静下来。

如果连基本的变量等号都不对齐,真只能是糟糕透了。下次就像自己看自己的代码的时候,也觉得恶心。

变量的命名一定要规范。你可以有自己的变量命名规范,如果小组开发中有自己的开发规范,那一定要遵守。

变量的命名尽量采用英文的命名,我使用的是小驼峰命名,即第一个单词小写,第二个单词首字母大写。

肯能我自己做过设计的原因吧,任何一件东西,首先要好看,其次再去谈用着怎么样。

毕竟,代码你每天都要去看他,实在不忍心自己的世界里都是荒乱无序的代码。

愿代码如诗,愿生活如虹。

与number_format函数有关的一个bug?的更多相关文章

  1. MySQL关于exists的一个bug

    今天碰到一个很奇怪的问题,关于exists的, 第一个语句如下: SELECT ) FROM APPLY t WHERE EXISTS ( SELECT r.APPLY_ID FROM RECORD ...

  2. 由一个bug引发的SQLite缓存一致性探索

    问题 我们在生产环境中使用SQLite时中发现建表报“table xxx already exists”错误,但DB文件中并没有该表.后面才发现这个是SQLite在实现过程中的一个bug,而这个bug ...

  3. 你可能不知道的 NaN 以及 underscore 1.8.3 _.isNaN 的一个 BUG

    这篇文章并不在我的 underscore 源码解读计划中,直到 @pod4g 同学回复了我的 issue(详见 https://github.com/hanzichi/underscore-analy ...

  4. 标准模板库(STL)的一个 bug

    今天敲代码的时候遇到 STL 的一个 bug,与 C++ 的类中的 const 成员变量有关.什么,明明提供了默认的构造函数和复制构造函数,竟然还要类提供赋值运算符重载.怎么会这样? 测试代码 Tes ...

  5. VC2013的一个bug

    前段时间在尝试使用一个C++的GUI库nana.这个库最大的特点在于使用现代C++风格去编写GUI程序,而不需要使用大量的比较丑陋的代码(如MFC中的各种宏),或者其它的非C++元素.这是一个比较新的 ...

  6. 关于C# XML序列化的一个BUG的修改

    关于C# XML序列化的一个BUG的修改 在我前一篇博客中提到用XML序列化作为数据库的一个方案,@拿笔小心 提到他们在用XML序列化时,遇到了一个比较严重的bug,即XML不闭合,系统不能正确的加载 ...

  7. [置顶]VC2013的一个bug

    [置顶]VC2013的一个bug 前段时间在尝试使用一个C++的GUI库nana.这个库最大的特点在于使用现代C++风格去编写GUI程序,而不需要使用大量的比较丑陋的代码(如MFC中的各种宏),或者其 ...

  8. sqlite在Android上的一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow

    更多内容在这里查看 https://ahangchen.gitbooks.io/windy-afternoon/content/ ::-/com.company.product W/System.er ...

  9. [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found

    google的android自带的apps写的是相当牛逼的,将其导入到eclipse中方便我们学习扩展.可惜关于导入的资料太少了,尤其是4.1之后的gallery和camera合二为一了.之前导4.0 ...

随机推荐

  1. HoloLens开发手记 - 应用程序模型 App model

    HoloLens使用Universal Windows Platform (UWP)提供的应用模型.UWP应用模型定义了应用如何被安全和完全地安装.更新.版本控制和移除.它管理了应用生命周期 - 应用 ...

  2. ASP.NET MVC 多语言实现技巧 最简、最易维护和最快速开发

    说说传统做法的缺点 1.做过多语言的都知道这玩意儿太花时间 2.多语言架构一般使用资源文件.XML或者存储数据库来实现.这样就在一定程序上降低了性能 3.页面的可读性变差,需要和资源文件进行来回切换 ...

  3. 基于nodejs的终端天气查询

    国际惯例,先上效果图 前天,突然想到,怎么直接在命令行查询天气呢?好的,那就写一个吧.然后就开始找城市.天气的api接口,最终做出来这么一个东西. 安装方法:$ npm install tianqi ...

  4. PHP 页面跳转方法

    1.php header()函数跳转 PHP的header()函数非常强大,其中在页面url跳转方面也调用简单,使用header()直接跳转到指定url页面,这时页面跳转是302重定向: $url = ...

  5. 深入学习JavaScript(二)

    函数表达式和函数声明 函数声明 function 函数名(参数){函数体} 函数表达式 function 函数名(可选)(参数){函数体} 示例: function foo(){} // 声明,因为它 ...

  6. 探究JVM——运行时数据区

    最近在读<深入理解Java虚拟机>,收获颇丰,记录一下,部分内容摘自原书. Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以 ...

  7. 【jQuery EasyUI系列】 创建展开行明细编辑表单的CRUD应用

    当切换数据网络格局(datagrid view)到detailview,用户可以展开一行来显示一些行的明细在行下面,这个功能允许您为防止在明细行面板中的编辑表单提供一些合适的布局. 步骤1.在HTML ...

  8. linux 配置 crontab

    linux中的crontab是定时用的,下面的cron服务就是定时器的意思 crontab -l 列举所有的cron服务 crontab -e 修改cron服务 crontab -r 删除cron服务 ...

  9. JavaIO流文件的操作总结

    IO流的分类 1.根据数据的流向: 输入流:用来读数据,如从外界设备读数据到内存中: 输出流:用来写数据,如从内存输出数据到外界存储设备: 2.根据数据流的格式: 字节流:一般用于声音或者秃瓢等二进制 ...

  10. ssh全屏退出的办法

    在使用ssh的时候遇到,不知道碰到哪里了,突然xshell就全屏了 解决方法 按下键盘 Alt+Enter就好了