Azure Storage - Двойная десятичная точка, игнорируемая на сохранении
-
27-09-2019 - |
Вопрос
У меня есть значение, которое правильно хранится в свойстве объекта, но когда я сохраняет изменения в базе данных хранения Azure, двойное значение хранится в базе данных, игнорируя точку (7.11000000003 сохраняется как 711). Также свойство изменено на 711,0.
Как мне решить эту проблему?
Поле уже установлено в двойной в классе и таблице базы данных.
Решение
Эта проблема, кажется, связана с настройками культуры, используемый хранилище разработки. Если вы посмотрите на таблицу TableRow внутри DE для хранения DEV, данные хранятся в виде XML, а десятичные значения используют точку в качестве десятичного сепаратора. Здесь, в Бразилии точка - это тысячи сепаратор. Я отредактировал данные прямо в хранилище DEV DB, изменяя точку на запятую (PT-BR PECIMAL SEDATOR), а значение было прочитано нормально. Это странно, потому что если значение будет читать ОК, когда мы используем десятичный разделитель PT-BR, кажется, что хранилище разработки использует мою текущую настройку культуры. Но почему культура не применяется к сохранению данных?
PS: Изменение локали Windows в UN-US решила проблему. Я думаю, вот почему это единственный пост, который я мог найти об этом.
Другие советы
Ваше двойное значение в собственном поле или это в поле Partitingkey или Bowkey? Partitingkey и rowkey всегда строки.
Я только что создал простой тест, который пишет и читает ряд с двойным полем, а значения сохраняются просто отлично. Я изменил образец SMSMessage Class из SMS-кода Bild Lodin через MSDEV.com Training (я взял поле INT GLAY и изменил его на поплавок и переименовал его в 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))
{
}
}
Я тогда пишу на SMSMessEtable:
smsTable.AddObject("SmsMessages", new SmsMessage(destination, message, myDouble));
smsTable.SaveChanges();
Я рассматриваю это в таблице хранения Explorer, и мои двойники - это то, как я их вошел (например, 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.