1 (изменено: alexii, 2012-02-15 18:07:35)

Тема: CMD/BAT: Расчет до сотых

Добрый день!
Подскажите, как можно заставить batch до сотых?
Пример:
1/3 мне выдает 0, как можно сделать 0,33. Может есть сторонние средства?

2 (изменено: Аскет, 2012-02-18 12:44:06)

Re: CMD/BAT: Расчет до сотых

lorents пишет:

Подскажите, как можно заставить batch до сотых?

Позволю себе процитировать классика:
- Математически.

lorents пишет:

Может есть сторонние средства?

Была где-то тулза отечественных разработчиков.

К сожалению, работает далеко не у всех - плагинов каких-то требует.
А в большинстве случаев, при попытке запуска из-под UserMode приводит к BSOD'у (скорее всего из-за отсутствия драйвера).

Но возможно, всё зависит от Операционной Среды.

3

Re: CMD/BAT: Расчет до сотых

умножить числитель на 100 не предлагать ?

Я конечно далек от мысли... (с)

4

Re: CMD/BAT: Расчет до сотых

smaharbA
пробовал, но у меня так и не вышло, думал может другие способы есть.

5

Re: CMD/BAT: Расчет до сотых

set /a x="100 * 1 / 3"
echo 0.%x%

Я конечно далек от мысли... (с)

6 (изменено: lorents, 2012-02-17 12:15:27)

Re: CMD/BAT: Расчет до сотых

а можно пример с процентами, 1/3=33,33%?
и у меня может быть ситуация 3/2=150%,00

7

Re: CMD/BAT: Расчет до сотых

типа того ?

echo off
setlocal ENABLEDELAYEDEXPANSION
set x=999
set y=39999999
set d=0
call :len "%y%%d%"
call :len "%y%"
set/a "n=%len% + %d%"
if %n% gtr 8 echo Количество знаков превышает воможности вычисления, поправимо, но не так
set /a "len=%len% + %d%"
set z=1
for /l %%i in (1,1,!len!) do set z=!z!0
set /a "z=%z% * x / y"
set /a "len=%len% - %d%"
for /l %%i in (1,1,!len!) do set z=0!z!
echo 0.%z%

exit /b

:len (string) {
    @@rem Процедура определения длины строки
    @@rem
    setlocal
    set opt=%~1
    set opt=%opt:"='%
    set out=%~0
    if "%out:~0,1%"==":" (
        set out=%out:~1%
        ) else (
        set out=out
        )
    set /a n=0
    :loop_len
    if not "%opt%"=="" (
        set opt=%opt:~1%
        set /a n=%n%+1
        goto loop_len
        )
    endlocal & set /a %out%=%n%
    exit /b 0
    }
Я конечно далек от мысли... (с)

8

Re: CMD/BAT: Расчет до сотых

допустим,
x=1
y=3
мне выдает 0.03, честно говоря, как это можно исправить, мне надо получить 33,3%

9

Re: CMD/BAT: Расчет до сотых

соглашусь код не верен, но смысл не меняется

Я конечно далек от мысли... (с)

10

Re: CMD/BAT: Расчет до сотых

разобрался. в чем была проблема. В батниках используется целочисленная 32 битная со знаком арифметика, т.е. максимально возможное число, с которым батники смогут что-то сделать это: -2147483648 и 2147483647