Azure存储 - 双小数点忽略上保存
-
27-09-2019 - |
题
我有被正确地存储在一个对象的属性的值,但是当我保存更改到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最佳答案。