Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить 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