PDA

Показать полную графическую версию : [решено] Обработка дробных чисел


newbibot
28-06-2016, 22:15
Здравствуйте.

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

Iska
29-06-2016, 01:09
Мсье, конечно, знает толк в извращениях. Но проще перейти к использованию WSH/PowerShell.

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

newbibot
29-06-2016, 16:11
Если бы я сам хотел так извращаться.
Перейти, к сожалению, никак.

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

Foreigner
29-06-2016, 17:31
как сделать так, чтобы не отбрасывалась дробная часть »

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

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

newbibot
29-06-2016, 17:53
Просто отбрасывает, не округляет »

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

Foreigner
29-06-2016, 18:42
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
newbibot, А как вообще дроби переводятся в дробное двоичное число? Будет ли верной запись:

56.36 = 100100111000 »

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

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

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

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

set /p num = Число:

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

Foreigner
29-06-2016, 19:34
Что в онлайне, что в моей проге 56.36 = 111000.0110 »
Поэтому и спрашивал. Как переводятся дроби в двоичные дроби? Мне не настолько это нужно, чтобы искать решение ради вас.
Это вот то мне и надо. »
И в чем проблема? Возьмите из примера выше:

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

newbibot
29-06-2016, 19:57
И в чем проблема? »

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

Пытался сделать как то так, но не работает.
for %%i in (%number%) do (
set a%k% = %%i
set/a k=%k%+1
)

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

Foreigner
29-06-2016, 20:16
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
Спасибо огромное, всё заработало.




© OSzone.net 2001-2012