我想找到一种简单的方法来在 SQL Server 中保存时保留 C# 十进制类型的尾随零。 示例:
- 5.3并保存,重新加载后系统应显示5.3。
- 05.30 并保存,系统应显示 5.30
- 5.300并保存,重新加载后系统应该显示5.300。
C# 十进制类型似乎做得很好,但 SQL 服务器十进制类型不是。 例如,我会将 SQL Server 列定义为 decimal(9,3),所有 3 个值都将保存为 5.300。
当然,我可以转换成字符串,但我只是想知道如果这个字段需要任何计算,是否有更优雅的解决方案。
最佳答案
我认为混合 DB 和 UI 层不是一个好主意。 SQL如何存储数据是DB的问题,如何向用户展示类型是UI的问题。
C# 以 10 为底的格式存储 Decimal:
http://msdn.microsoft.com/en-us/library/system.decimal.getbits.aspx
内部表示:
1m : 0x00000001 0x00000000 0x00000000 0x00000000
1.0000m : 0x000186a0 0x00000000 0x00000000 0x00050000
据我所知,MSSQL 中十进制的内部表示没有记录。并且,如果使用以下浮点格式 http://en.wikipedia.org/wiki/IEEE_754-1985 那就不可能了。
但是,MSSQL 中有小数的参数,如精度和小数位数。可以尝试使用 ADO.NET 在代码中操作此参数,如下所示:
var cmd = new SqlCommand("command", new SqlConnection("connection"));
cmd.Parameters.Add("@p1", SqlDbType.Decimal,18);
cmd.Parameters["@p1"].Precision = 18;
cmd.Parameters["@p1"].Scale = 8;
那么,它是可能的,但是,无论如何它是一个真正的黑客方法,你不应该在生产中使用它
关于c# - 在 SQL Server 中保存时,是否可以保留 C# 十进制类型的原始尾随零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27784410/