c# - 在 SQL Server 中保存时,是否可以保留 C# 十进制类型的原始尾随零?

标签 c# sql-server decimal precision

我想找到一种简单的方法来在 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/

相关文章:

asp.net - 带条件的 SQL Group By

java - 如何在用指数显示之前确定 DecimalFormat 的最大大小?

java - printf只在java中打印小数部分

c#从excel文件中获取值列表

c# - 遍历excel表中特定列号的所有行并对每一行值做一些处理

c# - 以编程方式呈现 Web UserControl

sql - 将临时表重命名为物理表

sql - 为什么 count(1)、count(column) 和 count(*) 的成本相同?

python - 从数据库中提取十进制数据并存储在数组中

c# - 为什么调试器/运行时不能告诉我哪个对象为空?