?

Log in

All of Photoshop (RU)
Скрипт подглючивает 
11-сент-2015 17:35
В моей работе мне часто приходится обрабатывать кучи файлов, выполняя кучи операций, все из которых прекрасно шаблонизируются. Кроме одной — округления размера типа 5000,5х1500,5mm в меньшую сторону.
Для этого я написал простенький скрипт:

app.preferences.rulerUnits = Units.MM;
app.activeDocument.resizeCanvas (Math.floor(app.activeDocument.width), Math.floor(app.activeDocument.height), AnchorPosition.TOPLEFT);

Но, к сожалению, когда один из размеров УЖЕ вполне себе круглый, скрипт вычитает миллиметр — и 1500, например, превращается в 1499.
Подозреваю, что моя ошибка глупа. В чём я ошибся?
hottafish
Comments 
11-сент-2015 08:28
М.б., размер только "выглядит" круглым, а на самом деле 1499.99999998? Прибавить сначала 0.0001 мм ?
11-сент-2015 09:01
А тоже вполне себе костыль :)
В моём случае можно даже побольше.
Потещщу в понедельник, а то не на чем уже.
11-сент-2015 08:32
Неточные вычисления - известная проблема яваскрипта.

alert( 0.1 + 0.2 > 0.3 ); // true

Почему? А вот почему alert( 0.1 + 0.2 ); // 0.30000000000000004

В вашем случае 1500, скорее всего равно 1499.99999999995 что в при округлении в меньшую сторону даст 1499

Так что app.activeDocument.width.toFixed(2) и вперед. Ну или делайте обычное округдение :)

Edited at 2015-09-11 08:33 (UTC)
11-сент-2015 09:00
Ну вот я так и догадался, правда, грешил больше на неточность перевода единиц (как это в Иллюстраторе, например, из-за чего, собственно, эти дроби изначально и вылазят).
Обычное округление низя, потому что надо именно всегда в меньшую (обычно там либо 0,5 либо 0,33 стоит).
Но почему же toFixed(2), а не (1)?
11-сент-2015 09:10
Это как пример был, но вы же всё поняли :))

(14.99999999999999999).toFixed(0) - по факту будет как оклугление. Просто тут может быть другая подстава

var price = 6.35;

alert( price.toFixed(1) ); // 6.3
alert( Math.round(price * 10) / 10 ); // 6.4

Я не совсем точно понял, что именно вы хотите, потому объяснил проблему, а вы уже сами допилите )
11-сент-2015 09:23
Да, я уже проверил в теории, потестил, думаю, смогу решить.
Спасибо! Я просто не секу в JS :) Поскрести по гуглам умею, а мануалы не читал.
11-сент-2015 09:35
Не вопрос, я сам не мегапро, но с такой фигней сталкивался )
This page was loaded янв 17 2017, 02:51 GMT.