|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] округлить число с плавающ точкой до его целой части |
|
CMD/BAT - [решено] округлить число с плавающ точкой до его целой части
|
Новый участник Сообщения: 9 |
Привет, друзья! подскажите плиз как округлить число с плавающей точкой до его целого значения.. (просто отсекать все, что после точки и сделать из числа целое число.. без его округления в меньшую или большую сторону в зависимости от значений дробной части)
к примеру есть число 1234.456789 это число хранится в переменной %num1% нужно взять это число из переменной %num1% привести к виду 1234 и снова поместить в переменную %num1% используя исключительно CMD синтаксис. как такое сотворить чудо чудное диво дивное? Спасибо!! |
|
Отправлено: 11:52, 29-01-2018 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать interestingyy,
Цитата interestingyy:
Преобразуем текст подобного вида в целое число с округлением
@echo off cls Set "A=-1234.3678" Echo: Echo %A% Call :Round "A" Echo %A% Set "B=1234.53678" Echo: Echo %B% Call :Round "B" Echo %B% Set "A=-1234.5678" Echo: Echo %A% Call :Round "A" Echo %A% Set "num1=1234.456789" Echo: Echo %num1% Call :Round "num1" Echo %num1% Pause GoTo :Eof :Round Call Set "@Round=%%%~1%%" Set /A @Split=0 FOR /F "tokens=1,2 delims=.," %%i IN ("%@Round%") DO Set /A @Round=%%i &If Not "%%j"=="" Set /A @Split=1%%j Set /A @Split=%@Split:~1,1% Set /A %~1=%@Round% If "%@Round:~0,1%"=="-" ( If %@Split% GEQ 5 Set /A %~1=%@Round%-1 ) Else ( If %@Split% GEQ 5 Set /A %~1=%@Round%+1 ) GoTo :Eof |
|
------- Последний раз редактировалось megaloman, 29-01-2018 в 13:16. Отправлено: 12:53, 29-01-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать ага.. понятно.. значит то у меня строку функция выдает.. понятно.. большое вам спасибо!
сейчас буду разбирать ваш код! я в cmd не очень силен.. ваши знания куда более существенные! спасибо вам за помощь! но кол-во знаков справо от разделительной точки, как и слева от нее - может быть абсолютно разным.. переменная %num% может принимать значения как 1.23 так и 23.5678 123.890432 569.492247 9999.99999 или 789075.7875 вобщем любые) и надо просто отсекать все, что справо от точки и саму точку.. в %num% у меня хранится значение времени в секундах.. это длительность видео в секундах, полученная при помощи команды |
Последний раз редактировалось interestingyy, 29-01-2018 в 14:10. Отправлено: 13:38, 29-01-2018 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать interestingyy,
Цитата interestingyy:
Ну, это в одно действие, это гораздо проще, если округлять не надо!
|
|
------- Последний раз редактировалось megaloman, 29-01-2018 в 14:54. Отправлено: 14:48, 29-01-2018 | #4 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Я бы сам долбался долго))) а можно вас еще попросить помочь мне код более компактным написать.. я чуть позже на этом форуме создам новую ветку с названием "Помогите организовать циклическую обработку файлов".. у меня есть код рабочий.. я его сам составил.. но там все в цикл запихнуть нужно.. это по обработке видео.. |
||
Отправлено: 15:23, 29-01-2018 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать interestingyy, Оба варианта из поста #4 работают одинаково, причем второй - короче. Короче одной строки (если не учитывать присваивание и эхо для отображения) придумать трудно
А с округлением чуть короче. Вся кухня - в подпрограмме :Round, всё остальное - примеры её использования и отображение результатов
@echo off cls Set "A=-1234,3678" Echo: Echo %A% Call :Round "A" Echo %A% Set "B=1234.53678" Echo: Echo %B% Call :Round "B" Echo %B% Set "A=-1234.5678" Echo: Echo %A% Call :Round "A" Echo %A% Set "num1=1234.456789" Echo: Echo %num1% Call :Round "num1" Echo %num1% Set "num1=1234" Echo: Echo %num1% Call :Round "num1" Echo %num1% Set "num1=1234." Echo: Echo %num1% Call :Round "num1" Echo %num1% Set "num1=1234.0123" Echo: Echo %num1% Call :Round "num1" Echo %num1% Set "num1=1234.0" Echo: Echo %num1% Call :Round "num1" Echo %num1% Pause GoTo :Eof :Round Call Set "@Round=%%%~1%%.0" Set /A @Split=1%@Round:*.=% 2>nul Set /A @Split=%@Split:~1,1% 2>nul Set /A @Round=%@Round% 2>nul If %@Split% GEQ 5 (Set /A @Split=1) Else (Set /A @Split=0) If %@Round% LSS 0 Set /A @Split=-%@Split% Set /A %~1=%@Round%+%@Split% GoTo :Eof Цитата interestingyy:
|
|
------- Отправлено: 15:35, 29-01-2018 | #6 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Да, учится на ваших кодах буду! |
|
Отправлено: 15:44, 29-01-2018 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Изменить разделитель целой и дробной части через групповые политики. | James Marsh | Microsoft Windows 8 и 8.1 | 0 | 08-04-2016 20:20 | |
Число мобильных пользователей Интернета превысит число его ПК-пользователей к 2016 го | OSZone News | Новости информационных технологий | 0 | 30-10-2012 20:30 | |
CMD/BAT - [решено] Сменить разделитель целой и дробной части | AlexVong | Скриптовые языки администрирования Windows | 1 | 15-04-2011 21:32 | |
Debian/Ubuntu - Как изменить разделитель целой и дробной части? | NordWest | Общий по Linux | 6 | 26-11-2009 10:55 | |
[решено] какая ветвь реестра отвечает за разделитель целой и дробной части? | dimds | Microsoft Windows NT/2000/2003 | 3 | 16-06-2006 18:22 |
|