Странное число с плавающей точкой из sqlserver jdbc river в ElasticSearch
У меня есть база данных SQLServer, и когда я импортирую тип с плавающей точкой, он импортирует неправильные значения:
Значение БД: 9,0 Значение ES: 90,0
Значение DB: 16,00 Значение ES: 16000000000000004
Я установил отображение для значения типа float и установил параметр scale:2 в конфигурации реки без успеха.
1 ответ
Я думаю, что где-то вдоль строки значение анализируется как строка и форматируется в неправильной культуре. Например, если ваша десятичная точка - запятая, то точка будет разделителем тысяч (большую часть времени) и будет просто игнорироваться:
PS> Get-Culture
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
PS> [double]::Parse('9.0')
90
И 16 не кажется точным 16, поэтому вы получите это смехотворно большое число.
Самым простым решением было бы изменить локаль на сервере или на вашей машине. Другой вариант - выяснить, является ли это ошибкой в вашем коде или в фреймворке. Как правило, при форматировании или синтаксическом анализе чисел, предназначенных для потребления машиной, всегда следует указывать культуру (например, инвариантную культуру в.NET или язык C на языке C), но многие приложения также ошибаются.