Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Обработка дробных чисел (http://forum.oszone.net/showthread.php?t=316275)

newbibot 28-06-2016 22:15 2646322

Обработка дробных чисел
 
Здравствуйте.

Такой вопрос. Вводится какое-либо дробное число, например 10,25. Как его обработать, чтобы дробная часть не пропадала?
Например, можно ли разбить его на две других переменные с целой и дробной частью, типа а=10; в=25?
Или есть ещё какой нибудь способ?

Iska 29-06-2016 01:09 2646343

Мсье, конечно, знает толк в извращениях. Но проще перейти к использованию WSH/PowerShell.

Что в данном конкретном случае значит «обработать»?

newbibot 29-06-2016 16:11 2646499

Если бы я сам хотел так извращаться.
Перейти, к сожалению, никак.

В данном случае мне нужно такое вот число перевести в двоичный вид. Перевод я сделал, а вот как сделать так, чтобы не отбрасывалась дробная часть - не знаю.

Foreigner 29-06-2016 17:31 2646525

Цитата:

Цитата newbibot
как сделать так, чтобы не отбрасывалась дробная часть »

Код:

2>nul set /a a=56.36
echo %a%

Просто отбрасывает, не округляет

newbibot 29-06-2016 17:53 2646536

Цитата:

Цитата Foreigner
Просто отбрасывает, не округляет »

Не совсем понял в чём фишка.
Мне нужно дробную часть тоже перевести. Но вот как её "поймать", чтобы она никуда не отбрасывалась и не округлялась, и чтобы потом её можно было перевести в двоичный вид - в этом весь вопрос.

Foreigner 29-06-2016 18:42 2646547

newbibot, А как вообще дроби переводятся в дробное двоичное число? Будет ли верной запись:
Код:

56.36 = 100100111000
Вот в чем вопрос. Разделить 56.36 на 56 и 36 легко, каждое из полученных перевести в двоичные числа тоже не составит труда, а вот будет ли это правильным?
Код:

@echo off
setlocal enabledelayedexpansion

set "double=56,36"

for %%i in (%double%) do call:0 %%i
echo %result%

goto:eof

:0
set dec=%1
:loop

if %dec%==1 (

        set bin=1!bin!
        set result=!bin!
        goto:eof

)

for /f %%i in ('set /a dec%%2') do (
       
        set bin=%%i!bin!
        if %%i==1 set /a dec-=1
        set /a dec/=2
        goto:loop

)


newbibot 29-06-2016 19:18 2646559

Цитата:

Цитата Foreigner
newbibot, А как вообще дроби переводятся в дробное двоичное число? Будет ли верной запись:

56.36 = 100100111000 »

Вообще не понял, откуда вы взяли это число.
Что в онлайне, что в моей проге 56.36 = 111000.0110

Да и опять же, суть не в переводе, этого вопроса вообще не стоит.

Цитата:

Цитата Foreigner
Разделить 56.36 на 56 и 36 легко »

Это вот то мне и надо. Только вот число вводит пользователь.
Вот стоит у меня

set /p num = Число:

И вводят туда любое число вида XY,QZ. Что мне потом делать с ним?

Foreigner 29-06-2016 19:34 2646566

Цитата:

Цитата newbibot
Что в онлайне, что в моей проге 56.36 = 111000.0110 »

Поэтому и спрашивал. Как переводятся дроби в двоичные дроби? Мне не настолько это нужно, чтобы искать решение ради вас.
Цитата:

Цитата newbibot
Это вот то мне и надо. »

И в чем проблема? Возьмите из примера выше:
Код:

set /p b="Enter double value with comma delimiter: "
for %%i in (%b%) do echo %%i


newbibot 29-06-2016 19:57 2646576

Цитата:

Цитата Foreigner
И в чем проблема? »

Проблема в том, что я только начал со всем этим разбираться и не совсем пока разбираюсь. Так то код ваш код мне понятен, но я не могу сделать так, чтобы это записалось в переменные, а не просто выводилось на экран.

Пытался сделать как то так, но не работает.
Код:

for %%i in (%number%) do (
set a%k% = %%i
set/a k=%k%+1
)

Если сможете и с этим помочь, то это будет последний штрих.
Спасибо.

Foreigner 29-06-2016 20:16 2646579

newbibot,
Код:

set d=56,36

for /f "tokens=1,2 delims=," %%i in ("%d%") do (
    set "a=%%i"
    set "b=%%j"
)

echo %a% %b%


newbibot 30-06-2016 22:25 2646946

Спасибо огромное, всё заработало.


Время: 20:26.

Время: 20:26.
© OSzone.net 2001-