1

Тема: AHK: Округлить данные буфера обмена и поместить обратно в буфер

Не пойму что делаю не так:


  clipboard = 12.51
  clipboard = Round ( %clipboard% ) ; округлить содержимое буфера обмена и передать обратно в буфер
  MsgBox %clipboard%

У меня выдёт "Round (12.51)". В чём я делаю ошибку?...

2

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

Переменные в функцию передаются без знаков процента. При присвоении значения используется знак :=

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: raznoczvetov, 2014-10-15 16:34:02)

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

Спасибо за ваш ответ! Пример заработал, но при применении с копированием текста из поля ввода, округление не срабатывает:


  MouseClick, Left, 373, 42, 2, 0 ; кликнуть левой кнопкой мыши 2 раза в координате поля ввода текста
  SendInput, ^{vk43} ; скопировать содержимое поля в буфер

  ClipWait, 2
    if ErrorLevel <> 0
    {
      MsgBox, Попытка скопировать текст в буфер обмена неудачна.
      Return
    }

  clipboard := Round (clipboard) ; округлить содержимое буфера обмена и передать обратно в буфер
  MsgBox %clipboard%

В результате выдаёт не округлённое дробное значение. Кто-нибудь встречался с подобным?
В значении, делитель запятая: 37,56  | а не точка: 37.56

4

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

При попытке сложения данных клипборда с единицей, выдаёт строку "37,56 + 1".
Что я делаю не правильно... Как сделать данные клипборда числом?

5

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

В значении, делитель запятая: 37,56  | а не точка: 37.56

Воспользуйтесь StringReplace.

6

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

Malcev пишет:

В значении, делитель запятая: 37,56  | а не точка: 37.56

Воспользуйтесь StringReplace.

Но там как раз всё правильно, ведь Round округляет, когда стоит запятая. При прямом присвоении переменной в clipboard у меня с точкой он не округляет, а с запятой округляет. А при копировании данных в буфер с помощью CTRL + C вообще не округляет.

7

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

В смысле, всё правильно? В программировании десятичную часть принято отделять точкой, иначе текст будет восприниматься, как строка, а не число. Round() округляет не 37,56, если такое туда подставить, а 37 до 56-го знака. Если же 37,56 будет в переменной, то Round() будет не округлять, а просто отсекать числовую часть с начала строки. Сравните:

var1 := "37,56"
var2 := 37.56
MsgBox, % Round(var1) "`n" Round(var2)
raznoczvetov пишет:

А при копировании данных в буфер с помощью CTRL + C вообще не округляет.

Ну так и не должен округлять с запятой, это просто побочный эффект. Замените запятую на точку, и убедитесь, что не попали пробелы или ещё какие ненужные знаки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

В вашем примере, число с точкой, переданное через обычную переменную округляет.
А если через clipboard, то не округляет:


  clipboard := 10.88
  clipboard := Round (clipboard) ; округлить содержимое буфера обмена и передать обратно в буфер
  MsgBox %clipboard%

9

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

Меняю на точку, точка заменяется, но число не округляется. Хотя при замене я помещаю его в другую переменную (не clipboard).


  StringReplace, newVar, clipboard, `,, `.
  clipboard := Round (newVar) ; округлить содержимое буфера обмена и передать обратно в буфер
  ; SendInput, ^{vk56} ; вставить содержимое из буфера
  MsgBox %clipboard%

10 (изменено: Malcev, 2014-10-15 18:56:07)

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

clipboard = 10,88
msgbox % clipboard
StringReplace, clipboard, clipboard, `,, .
msgbox % clipboard := Round(clipboard)

11

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

raznoczvetov пишет:

В вашем примере, число с точкой, переданное через обычную переменную округляет.
А если через clipboard, то не округляет:


  clipboard := 10.88
  clipboard := Round (clipboard) ; округлить содержимое буфера обмена и передать обратно в буфер
  MsgBox %clipboard%

Пробела после Round не должно быть.


  clipboard := 10.88
  clipboard := Round(clipboard) ; округлить содержимое буфера обмена и передать обратно в буфер
  MsgBox %clipboard%
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Округлить данные буфера обмена и поместить обратно в буфер

Спасибо!