Azure存储 - 保存时忽略双小数点

时间:2010-06-14 12:02:58

标签: azure azure-table-storage

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

如何解决这个问题?

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

4 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

你是如何检查价值的?本地开发存储使用SQL Express,因此您可能会打开SQL并在那里进行搜索。我会避免这种情况,而是使用.NET存储客户端库读回值。我怀疑价值会正确回归。

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

答案 3 :(得分:0)

虽然我很欣赏这种努力,但我可能没有充分地揭露这个案例,但这些都没有真正回答我的问题。这个答案不是不公平地归咎于赏金。赏金不应自动归因于> = 2 upvotes的最佳答案。