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

我该如何解决这个问题?

在字段已经被设置在类和数据库表翻一番。

有帮助吗?

解决方案

此问题似乎是由于开发的存储使用培养的设置。如果你看看在开发存储数据库内的TableRow表,将数据存储为XML,十进制使用点作为小数点分隔符。在这里,在巴西的点是千位分隔符。我直接在开发储存分贝编辑的数据,改变点为逗号(PT-BR小数隔膜),并且该值被读出确定。这是奇怪的,因为如果值是读好,当我们使用PT-BR小数点分隔符,看来开发的存储使用我目前的文化背景。但是,为什么文化不应用于保存数据?

PS:更改Windows区域到EN-US解决了这个问题。我想这就是为什么这是唯一的发布,我可以找到它。

其他提示

是您的双重价值在其自己的领域,或者是在partitionkey或rowkey场? PartitionKey和RowKey总是字符串。

我刚创建一个简单的测试,其写入和读取的行具有双字段,并且该值被保持得很好。我经由msdev.com训练改性比尔Lodin的SMS代码样品SmsMessage类(I接过INT延迟字段,并将其改变为浮动,并将其重命名为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;

我的双值都保存和强类型为双打。

你是如何检查的价值?地方发展的存储使用SQL Express中的引擎盖下,所以你可能会开放SQL和闲逛那里。我想避免这种情况,而是使用.NET存储客户端库回读值。我怀疑值会回来正确。

(也许在本地SQL支持存储,该值被存储在科学记数法?)

虽然我很欣赏的努力,可能是我没揭穿的情况不够好,这一切都不真正回答我的问题。这个答案是不不公平属性赏金。恩惠不应自动归因于与> = 2个upvotes最佳答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top