Browsing the archives for the .NET category

double运算精度

今天下午业务部门彪过来一个电话,去年刚毕业时候做的一个小程序出了点问题,对账差了0.05元,过不了校验。一开始我还怀疑是数据有问题,但是复制到excel里以后发现金额是正确的,那必然就是程序出了问题。
查了半天程序,最后在一个累加的double型上盯了一会,又问了下同事,果然是这里出了问题,0.1被计算成了0.09999999,最后导致了误差的产生。网上说这是有double的精度造成的问题,2进制和10进制的差异。
改用Decimal就搞定这个问题了,查了下资料,商业计算上都是用BigDecimal,没有用double和float的,看来基础还不够扎实,惭愧啊,Mark一下,提醒自己。

0 Comments

保持函数的向后兼容性

      在许多项目开发中,除了新增各种函数,有时候也会出现修改原有函数的问题,碰到需要修改函数定义,比如修改传入参数个数类型时,就会碰到一些向后兼容性的问题。      实现代码如下:      functionA():this(false)     {}      functionA(bool para)     {….}      这样外部以前调用functionA的项目就能够继续使用新的functionA函数,而不需要更改每个调用函数A的地方:)

0 Comments

慎用精简版,绿色版,特别版。。。。[update]

      慎用各类精简版,绿色版,特别版。。。!      今天安装VMWare,在非凡上下了一个几十M的精简版,结果碰到了很多问题,虚拟机的网络连接一直故障,回家重新安装了完整版,发现问题解决,不用修改任何配置,虚拟机就能用NAT方式共享主机网络上网,桥接明天去办公室再试下。      记录下安装过程中的一些问题:      不想要或者禁止easy install的,新建主机时在选镜像那里直接选最后一个,不安装镜像。电影启动后再加载镜像文件。      虚拟机开机进入时出现no dhcp错误时,确定你的镜像文件来源,最好使用完整的镜像,自己把文件夹做成iso可能会有问题,主要是一个启动引导文件的关系,换成直接的iso安装镜像即可。      网络连接,完整版里其实没什么要设置的。。        我装的是windows 2003 SP2 企业版,明天开始研究server配置了,晚安~      [2009.11.15 update]桥接正常,看样子确实是版本的问题:)

0 Comments

installutil命令设置用户提示帐户名无效或不存在(解决)

      今天在安装CruiseControl时出现一点小问题,就是在将CCService安装到服务时要输入运行帐户,一直出现“帐户名无效或不存在,或者密码对于指定的帐户名无效。”的提示,帐号和密码都是正确。      命令如下 installutil CCService,最后找到了两个解决方法:      一是用如下的格式输入用户名 machineNameusername,搞定,我是通过远程桌面登陆到服务器的。如果在本地应该.username也是可行的,没有尝试过。      二是如果程序是用VS开发的,则在serverProcessInstall中把Account设成LocalSystem即可,但是这个方法过于放权,允许所有本地用户使用,感觉是user比较容易控制。      第二个方法是在网上找到的,实际中使用第一个方法解决:)

0 Comments

纠结的类型和执行顺序问题

      今天测试一个小软件,发现其中的一个功能有很大的问题,存在不确定性的错误。功能简述如下,A函数校验数据库,通过校验的行设mark字段为0,B函数导出所有通过校验的行ID。这看似非常简单的一个功能,却被我整出了两个问题。      首先是类型混乱,用惯了.NET那个非常顺手的.,有什么类型不匹配直接.一下转换过去,到后来全部都变成字符串类型了,弄得字段类型混乱。另外一个就是我把A和B函数写在了一个click事件里,A前B后,自己测试的时候没什么问题,就四行数据,到小环境里测试时,问题出现了,数据量一大,B函数导出数据里就会有丢失,库中部分通过校验的行ID没有出现,我用了整整一个上午在找原因,一步步跟踪,最后个人确定问题发生在AB两个执行顺序上,按理说A前B后,应该是A执行完了才执行B,但实际情况貌似不是这样。数据量较大时,A并没有完成全部校验,本例中是最后一条数据没校验,B函数就开始导出,结果漏掉了最后一条数据。将AB分别写到两个click中进行测试,不再发现有此类问题。      第一个问题主要是编程习惯,对于类型太随便,不够严谨,.net本来并不是我喜爱的,但因为工作又重新拿了起来,发现它还是有很多优点的:)第二个问题感觉是对执行顺序的理解不够透彻,在某些方面不太了解,如果有谁知道,也欢迎点化我一下。。

1 Comment