1

我有一个正确存储在对象属性中的值,但是当我将更改保存到 Azure 存储数据库时,忽略该点(7.11000000003 保存为 711)将双精度值存储到数据库中。此外,该属性更改为 711.0。

我该如何解决这个问题?

该字段已在类和数据库表中设置为 double。

4

4 回答 4

3

你的 double 值是在它自己的字段中,还是在 partitionkey 或 rowkey 字段中?PartitionKey 和 RowKey 始终是字符串。

我刚刚创建了一个简单的测试,该测试使用双字段写入和读取一行,并且值保存得很好。我通过 msdev.com 培训修改了 Bill Lodin 的 SMS 代码中的示例 SmsMessage 类(我将 int Delay 字段更改为浮点数,并将其重命名为 MyDouble 以进行澄清):

public class SmsMessage: TableServiceEntity
{
    public double MyDouble { get; set; }
    public SmsMessage(string destination, string message, double myDouble)
    {
        PartitionKey = destination;
        RowKey = message;
        MyDouble = myDouble;
    }
    public SmsMessage()
        : base("", string.Format("{0:d10}", DateTime.Now.Ticks))
    {
    }
}

然后我写信给 SmsMessageTable:

smsTable.AddObject("SmsMessages", new SmsMessage(destination, message, myDouble));
smsTable.SaveChanges();

我在表存储资源管理器中查看这个,我的双打是我输入它们的方式(例如 1.2345)。

然后,我使用简单的 linq 查询检索分区键中的给定用户名:

var results = from m in smsTable.SmsMessages
                      where m.PartitionKey.Equals(txtDestination.Text.Trim())
                      select m;

我的双精度值都被保留并强类型为双精度值。

于 2010-06-14T20:48:42.983 回答
2

这个问题似乎是由于 Dev Storage 使用的文化设置造成的。如果您查看 Dev Storage db 中的 TableRow 表,数据存储为 XML,十进制值使用点作为小数分隔符。在巴西,点是千位分隔符。我直接在 Dev Storage db 中编辑了数据,将点更改为逗号(PT-BR 小数分隔符),读取的值正常。这很奇怪,因为如果我们使用 PT-BR 小数分隔符时读取的值正常,那么 Dev Storage 似乎正在使用我当前的文化设置。但是为什么文化不适用于保存数据呢?

PS:将Windows语言环境更改为EN-US解决了这个问题。我想这就是为什么这是我能找到的唯一一篇关于它的帖子。

于 2010-10-25T18:12:23.437 回答
1

你如何检查价值?本地开发存储在后台使用 SQL Express,因此您可能会打开 SQL 并在那里四处寻找。我会避免这种情况,而是使用 .NET 存储客户端库读回该值。我怀疑该值会正确返回。

(也许在本地 SQL 支持的存储中,该值以科学计数法存储?)

于 2010-06-15T00:32:36.600 回答
0

尽管我很欣赏我的努力,而且可能我没有充分地揭露这个案子,但这些都没有真正回答我的问题。这个答案只是不公平地归因于赏金。赏金不应自动归因于 >= 2 赞成票的最佳答案。

于 2010-06-27T15:20:23.743 回答