我有一个正确存储在对象属性中的值,但是当我将更改保存到Azure存储数据库时,double值将存储到数据库中而忽略该点(7.11000000003保存为711)。此外,该属性更改为711.0。
如何解决这个问题?
该字段已在类和数据库表中设置为double。
答案 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的最佳答案。