【问题标题】:How to construct an instance of the SqlDecimal datatype that specifies precision and scale如何构造指定精度和小数位数的 SqlDecimal 数据类型的实例
【发布时间】:2013-04-21 21:19:38
【问题描述】:

MSDN 有关于如何构造 SqlDecimal 数据类型的新实例的文档,其中包括指定精度和小数位数,只能在构造时设置。

这是一个有效的例子,但我不明白如何设置 value 属性:

SqlDecimal Test2 = new SqlDecimal(10, 3, false, new int[4] { 2, 1, 0, 0 });  

当我打印以下调试语句时,我看到 Precision 和 Scale 参数是直截了当的,但我不明白该值是如何从长度为 4 的整数数组中确定的。

? Test.Precision
10
? Test.Scale
3
? Test2.Value
-4294967.298

4 个整数如何“组合”来指定值?没有例子也没有解释。

【问题讨论】:

    标签: c# .net sql-server


    【解决方案1】:
    int[4] { 2, 1, 0, 0 }
    =
    96-127: 0000 0000 0000 0000 0000 0000 0000 0000   -- 0
    64- 95: 0000 0000 0000 0000 0000 0000 0000 0000   -- 0
    32- 63: 0000 0000 0000 0000 0000 0000 0000 0001   -- 1
    00- 31: 0000 0000 0000 0000 0000 0000 0000 0010   -- 2
    

    这个128位二进制的值为

    2 ^ 32 + 2 ^ 1 = 4294967298
    

    因为小数位是3,所以小数点左移3,变成4294967.298
    SqlDecimal 结构的第三个参数为false 使其为负值。

    【讨论】:

    • 我看到第一个数组位置的值 p1 被视为十进制数 p1 ^ 1(或 2 ^ 0)。这个值与 p2 * (2 ^ 32) 相加.下一个位置的值会是 p3 * (2^64) 然后是 p4 * (2^128)?
    • 我认为你不会使用 p4。它应该会出现错误,因为即使 SqlDecimal 是在 .net decimal 类型(102/128 位)上松散建模的,SqlDecimal 类型的实际精度最大为 38 左右。跨度>
    猜你喜欢
    • 1970-01-01
    • 2014-07-15
    • 2020-09-09
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2012-05-26
    相关资源
    最近更新 更多