数据精度这是一个很小的问题,在.net中都有专门的函数来进行处理,System.Decimal.Round,可是你知道 System.Decimal.Round(a,2),System.Decimal.Round(a,2)和
System.Decimal.Round(a,2,MidpointRounding.AwayFromZero)这2个函数的区别吗,还有在SQLServer数据库中 Round(a,2)的取值是怎么样的吗?
一般情况下,我们在日常生活中是使用4舍5入来进行计算的,但是现在国际的有的就是使用4舍6入5成双的算法,即在C#代码中取小数时采用System.Decimal.Round(a,2)这个方法,如果取用的是System.Decimal.Round(a,2,MidpointRounding.AwayFromZero)这个方法就是采用的我们日常所用的4舍5入。但是在SQL Server中一般我们用的Round(a,2)这个方法取的就是4舍5入的算法。但是SQL Server中没有提供4舍6入5成双的现成实现,需要自己写函数来实现。因此很容易出现在代码中使用了4舍6入5成双,而在数据库中使用的是4舍5入。如果涉及到财务报表和单据的查询时,很有可能就会有精度的误差。
一般财务上出现了偏差,哪怕是一分钱都是不允许的,因此这个问题在系统的设计之初就要考虑一致性,但是很多系统可能都没有考虑过。目前我们在实现一个项目时就发现了目前我们的系统出现了这样的问题。所以精度的问题是不容忽视的。
C和C++有很多好的类库的沉淀,在.NET中,完全抛弃它们而重头再来是非常不明智的、也是不现实的,所以,我们经常需要通过Pinvoke来使用以前遗留下来的非托管的dll。就.NET中使用非托管的dll经验而言,经常碰到的问题至少有两个,它们都是通过在运行时抛出异常来体现的。
1.试图加载格式不正确的程序
出现这种异常,通常是.NET应用程序的“目标平台”与非托管dll的平台不一样。
一般,在使用VS开发.NET的应用程序和类库时,默认的目标平台为“Any CPU”,即会在运行时可根据CPU类型自动选择X86或X64,拥有这样的能力是因为.NET编译后的程序集是基于IL的,在运行时,CLR才会将其JIT发射为X86或X64的机器码。
而C或C++编译生成的dll就是机器码,所以,其平台的决策是在编译时决定的。通过编译选项的设置,我们可以将C/C++项目编译为X86的dll或者X64的dll。
所以,在调用了非托管dll的.NET项目中,也需要将其目标平台属性设为与非托管的dll的运行平台完全一致。通常遗留下来的非托管dll都是基于x86的,所以,在调用了这类非托管dll的.NET项目中,就将其目标平台属性设为“X86”。
可根据“项目->属性->生成->目标平台”找到该设置:
2.无法加载dll,找不到指定的模块。
运行调用了非托管的.NET应用程序有时会出现这种异常,可是比较郁闷的是,这种异常并不是在所有的电脑上都会出现,就经验来说,它只是在少部分电脑上出现,而在绝大部分电脑上运行都是正常的。我们在开发语音视频录制组件MFile时,就遇到过这个问题,当时很是头疼。
如果出现这种情况,很大的可能就是那少部分电脑上没有安装VC++运行时(CRT),或者是CRT安装不正确导致的。好用的解决方案有两种:
(1)在C盘下找到了下列文件:msvcm80d.dll、msvcp80d.dll、msvcr80d.dll、Microsoft.VC80.DebugCRT.manifest。把这几个文件拷贝到目标机器上,放到运行目录下或放到system32下,就可以了。
注意,一般这几个文件都有多个版本,位于不同的文件夹下,要观察其文件夹的名称:是x86还是x64的、是debug的还是release的、以及是否要MFC的,这些选择要与非托管dll的信息一致。
(2)如果有非托管dll的源码,那就修改编译选项,重新编译一下:将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要上述几个dll了。
今天给大家介绍一些有关WIZnet嵌入式网络服务器用户手册中简介、模块图、服务器基板和入门指南相关内容。WIZnet嵌入式网络服务器使用到了全硬件TCP/IP芯片W5300,主单片机采用到了8位的AVR单片机(ATmega128)。
1. 简介WIZnet嵌入式网络服务器为您提供了在低速单片机上工作的小型网络服务器。它通过网页浏览器来控制数字输出或监视数字和模拟输入。网页被存储在板上的串行闪存存储器上,可以通过网络进行远端更新。
1.1. 主要功能
- 作为HTTP服务器工作
- 通过使用硬件芯片W5300来保证系统的稳定性和可靠性
- 提供配置工具程序以方便控制和配置
- 支持10/100 Mbps以太网
- 符合RoHS标准
1.2. 规格 1.3. 配件(WIZnet嵌入式网络服务器)
☞如果发现配件不全,请联系你所购买的商店。
2. 模块图
WIZnet嵌入式网路服务器的主单片机是8位的AVR单片机(ATmega128)。以太网功能通过硬件TCP/IP协议栈芯片W5300来实现。在网