|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.11.2012, 21:25 | #1 | |
dimgunkin
Форумчанин
Регистрация: 06.05.2010
Сообщений: 112
|
Перевод строки "1984.45" в число и выделение целой части
Здравствуйте!
Запутался напрочь с типами переменных. Задача такова: из строки "1984.45" сделать число "1984" Мои наброски: Код:
Цитата:
3453.45 2367.87 4567.34 ну и т.д. Я выбрал Int, так как там число с плавающей точкой Но у меня ничего не работает. Что тип Int, что Trunc, воспринимают только запятую. Вот ошибка если с точкой: Как быть, помогите разобраться пожалуйста. Я думаю что мой способ древний и корявый, может вы предложите что-то посвежее. Буду рад любой помощи |
|
27.11.2012, 22:21 | #2 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 58
|
Попробуйте вместо Trunc, использовать Round().
|
27.11.2012, 22:25 | #3 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
decimalseparator:= '.' спасут отца русской демократии.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
27.11.2012, 22:59 | #4 |
dimgunkin
Форумчанин
Регистрация: 06.05.2010
Сообщений: 112
|
Не вариант, мне в принципе не очень важно, будет ли обрезаться всё что после запятой или округляться, дело в том что ошибку это мою не исправит((
|
27.11.2012, 23:09 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Вместо изменения decimalseparator можно просто заменять точку на запятую в исходных данных перед преобразованием (функция StringReplace). Настройка decimalseparator понадежней - не будет зависимости от настроек винды
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
27.11.2012, 23:14 | #6 |
dimgunkin
Форумчанин
Регистрация: 06.05.2010
Сообщений: 112
|
Сделал пока что замену "." на ","
Код:
Но с точки зрения кода и так сказать, актуальности, это всё через попу( Если есть какие-нибудь актуальные и менее громосткие, во всех отношениях, решения, прошу помочь хотя бы направлением в лучшую сторону. |
27.11.2012, 23:21 | #7 |
dimgunkin
Форумчанин
Регистрация: 06.05.2010
Сообщений: 112
|
Спасибо большое)) С разрывом в 5 минут пришли к одному и тому же решению Я так понимаю что больше вариантов, так сказать более легких, нету) Ну что же, всем спасибо за ценные советы и ответы.
|
27.11.2012, 23:22 | #8 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
decimalseparator/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
28.11.2012, 06:42 | #9 |
Участник клуба
Регистрация: 09.11.2007
Сообщений: 1,762
|
Не мучайте компилятор и сделайте всё через DecimalSeparator. Так будет намного правильней.
|
28.11.2012, 10:49 | #10 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
В разных языках в качестве десятичного разделителя могут использоваться различные символы. В Вашем случае в системе = десятичный разделитеть ",", а в данных - ".". Другими словами, с точки зрения системы, данные содержат ошибку в формате записи числа. Обнаружение, а тем более исправление ошибок - занятие достаточно сложное в общем случае. В данном случае исправлять ошибку можно двумя способами: 1. Объяснить системе явно, какой именно символ следует считать десятичным разделителем. 2. Заменить в данных имеющийся десятичный разделитель на тот, который хочет получить система. Оба способа уже были Вам предложены. От себя могу добавить, что желательно сделать так, чтобы Ваша программа была нечувствительна ни к настройкам системы (ведь Вашу программу возможно потребуется запускать на другом компьютере), ни к особенностям представления данных (ведь может оказаться, что в другой раз Вам предложат файл с запятой в качестве разделителя). А для этого, возможно, придется комбинировать оба способа. Только следует учесть, что существует вариант записи чисел, при котором дробная часть отделяется точкой, а тысячи, миллионы и пр. отделяются запятой. PS. Кстати, если задача стоит именно так: "присвоить целой переменной целую часть числа, записанного строкой", то решить ее можно гораздо проще: 1. Усечь строку до первого нецифроволо символа. 2. Перевести строку в число. Последний раз редактировалось s-andriano; 28.11.2012 в 10:57. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Pascal ABC строки - программа, которая каждую встреченную букву "б" заменяет сочетанием "ку" (использовать модули) | Raigo | Помощь студентам | 6 | 17.05.2012 15:35 |
[C#] перевод части к типу "string" :eek: | JonMagon | Помощь студентам | 4 | 19.08.2011 17:52 |
Перевод "пространственных" координат в "экранные" , смена перспективы , вращение. | vedro-compota | Общие вопросы Delphi | 6 | 08.06.2010 21:59 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |