Azure Storage - Двойная десятичная точка, игнорируемая на сохранении

StackOverflow https://stackoverflow.com/questions/3037028

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top