Вывод double как дюймовый размер - натуральной дробью

Автор Тема: Вывод double как дюймовый размер - натуральной дробью  (Прочитано 4746 раз)

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

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Один Американский заказчик попросил, чтоб мой плагин выводил размеры объектов не десятичным числом, а натуральной дробью. Любовь Американцев к дробям непокобелима :) Полез смотреть какой формат надо написать в double.ToString и (опа!) оказывается нет такого формата. Но ведь автокад легко выводит длины дюймовых чертежей дробями. Может где-то в AutoCAD.Net есть такое преобразование к строке? Или я плохо искал в C#?

Отмечено как Решение avc 25-04-2016, 00:10:59

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Autodesk.AutoCAD.Runtime.Converter.DistanceToString()
Параметры подбери сам. :)
Форматирование плавающего числа в строку
« Последнее редактирование: 24-04-2016, 01:13:22 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Спасибо. То что надо. Функция получилась такой:
Код - C# [Выбрать]
  1.     static int Prec(string format)
  2.     {
  3.       if (format.Length > 2 && format[2] >= '0' && format[2] <= '8')
  4.         return (int)format[2] - (int)'0';
  5.       else
  6.         return Convert.ToInt16(AcadApp.GetSystemVariable("LUPREC"));
  7.     }
  8.  
  9.     /// <summary>
  10.     /// Аналог double.ToString(format), но добавляет дробные форматы Автокада:
  11.     /// CU - как настроено в текущем документе автокада ( LUPREC )
  12.     /// AR - Architectural
  13.     /// EN - Engineering
  14.     /// FR - Fractional
  15.     /// во всех форматах, кроме CU, можно указать точность как число от 0 до 8и
  16.     /// </summary>
  17.     public static string ToFStr(this double length, string format = "")
  18.     {
  19.       if (string.IsNullOrWhiteSpace(format)) format = "CU";
  20.       if (format == "CU")
  21.         return Converter.DistanceToString(length);
  22.       if (format.StartsWith("AR"))
  23.         return Converter.DistanceToString(length, DistanceUnitFormat.Architectural, Prec(format));
  24.       if (format.StartsWith("EN"))
  25.         return Converter.DistanceToString(length, DistanceUnitFormat.Engineering, Prec(format));
  26.       if (format.StartsWith("FR"))
  27.         return Converter.DistanceToString(length, DistanceUnitFormat.Fractional, Prec(format));
  28.       return length.ToString(format);
  29.     }