我有一个在.net framework 2.0中运行的c#代码,当将十进制转换为要打印在文件中的字符串时,会在不同的Windows操作系统中产生不同的输出。
我已经检查了两个系统的注册表设置是否完全相同,相同的语言,相同的数字格式等。
我的代码看起来像这样
object o = dr.GetValue(dr.GetOrdinal(cCol.ColumnName));
string value = Convert.ToString(o);
它正在从数据库中获取值,并且对象的类型为Decimal(o.GetType()== typeof(Decimal)的结果为true)
问题是,当此程序在.net Framework 2.0中运行但在Windows 2000服务器中时,输出与Windows 10中的.net Framework 2.0中运行的输出不同。
例如,值为2016
Windows 2000输出:“ 2016”
Windows 10输出:“ 2016.00”
我尝试了以下操作
string value = ((Decimal)o).ToString("0.##"));
然后,输出与值2016相同。但是,在这里比较棘手,如果将值设为2016.6,则此新方法的输出为:
Windows 2000输出:“ 2016.60”
Windows 10输出:“ 2016.6”
因此,无法在两个系统中都无法输出相同的结果。
问题的根源是什么?我可以在Windows 10中获得与Windows 2000相同的输出吗?
谢谢
回答我自己的问题,我发现问题是,在Windows 2000中,db驱动程序有时将值返回为Int,而其他值则返回为十进制,而在Windows 10中则始终为十进制。因此问题出在数据库驱动程序而不是.net框架。