Знак разделения дробной части

Автор Тема: Знак разделения дробной части  (Прочитано 3969 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Появилась нужда определить знак разделения дробной части, установленный в операционной системе. В принципе сделать это не проблема:
Код - C# [Выбрать]
  1. NumberFormatInfo numberFormatInfo;
  2. string decimalSeparator;
  3.  
  4. numberFormatInfo = CultureInfo.CurrentCulture.NumberFormat;
  5. decimalSeparator = numberFormatInfo.NumberDecimalSeparator;

А проблема возникает при вызове этого кода из C3D (в обычном Автокаде не проверял, у меня его нет) - вместо "," он выдает ".". Я даже делал "чистую" проверку - создал отдельную DLL, которая как раз и выводит значение знака разделителя. При подключении этой DLL в какой-нибудь экзешник получаю ожидаемую ",", а вот при подключении этой же DLL в приложение, вызываемое из C3D - получаю неведомую ".". Во время отладки вижу имя "ru-RU" и все знаки разделения дробной части - точки, вместо запятых, которые установлены у меня в системе.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Знак разделения дробной части
« Ответ #1 : 10-04-2016, 13:56:06 »
Так и должно быть. AutoCAD подменяет это значение для того, чтобы правильно (в своём понимании) выводить дробные числа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Знак разделения дробной части
« Ответ #2 : 10-04-2016, 13:58:42 »
А как тогда из Автокада получить настоящий знак, установленный в системе?

Отмечено как Решение Алексей Терно 10-04-2016, 14:37:22

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Знак разделения дробной части
« Ответ #3 : 10-04-2016, 14:37:04 »
Есть контакт!
Получилось двумя способами:
1. просто использовать CurrentUICulture, вместо CurrentCulture
2. создать новый экземпляр CurrentCulture:
Код - C# [Выбрать]
  1. CultureInfo currentci = CultureInfo.CurrentCulture;
  2. CultureInfo myci = CultureInfo.CreateSpecificCulture(currentci.Name);

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Знак разделения дробной части
« Ответ #4 : 10-04-2016, 20:29:50 »
Еще один вариант для получения разделителя целой и дробной части на уровне пользователя: прочитать из реестра HKEY_CURRENT_USER\Control Panel\International значение sDecimal.
Код - C# [Выбрать]
  1. string delim = (string)Microsoft.Win32.Registry.GetValue("HKEY_CURRENT_USER\\Control Panel\\International", "sDecimal", ",");
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение