Странное число с плавающей точкой из 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), но многие приложения также ошибаются.

Другие вопросы по тегам