Тема: AHK: Количество знаков после запятой
На вход поступает целое число, либо число с плавающей точкой. Скрипт должен определить, не превышает ли количество знаков после точки заданное количество (к примеру 4).
Существуют ли стандартные способы?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
На вход поступает целое число, либо число с плавающей точкой. Скрипт должен определить, не превышает ли количество знаков после точки заданное количество (к примеру 4).
Существуют ли стандартные способы?
Думаю нет. Только типа такого что-то делать:
digit := 3.01, maxcount := 2
If InStr(digit, ".") and (StrLen(RTrim(digit, "0")) - InStr(digit, ".") > maxcount)
msgbox Not Ok
else
msgbox Ok
digit := 3.23, maxcount := 2
MsgBox % !InStr(digit, ".", 0, (maxcount + 1) * -1) ; 1 - не превышает
В таком случае показывает неверный результат:
digit := 3.000, maxcount := 2
MsgBox % !InStr(digit, ".", 0, (maxcount + 1) * -1) ; 1 - не превышает
Почему? Ноль же возвращает, количество после точки больше 2.
3.000 - это целое число.
Про замыкающие нули не видел в задании ни слова.
digit := 0.340, maxcount := 2
MsgBox % Round(digit + 0, maxcount) = digit
Или тут ноль в конце уже должен учитыватся?
Да, требуется учесть все цифры после точки, в том числе ноль.
Malcev, может, я чего не понимаю, но у меня выводит "Ок", если число будет таким:
entrance := 3.130, count := 2
Да, требуется учесть все цифры после точки, в том числе ноль.
Ну тогда 3 пост.
Malcev, может, я чего не понимаю, но у меня выводит "Ок", если число будет таким:
entrance := 3.130, count := 2
В моём варианте нули идущие в конце дробной части подчищаются, поэтому выводит OK.
В моём случае полностью подошёл вариант от serzh82saratov.
Извините, можно с помощью ahk обрезать и оставить только два знака после запятой.
Пример 123,123 = 123,12
0,234 = 0,23
str := "0,234"
MsgBox, % newStr := RegExReplace(str, ",\d\d\K\d+")
Может так же Format() пригодиться, если речь всё же о числе с плавающей точкой.
MsgBox % Format("{:0.2f}", 123.12345678)
Спасибо всем.
InputBox, UserInput,
str := % UserInput
MsgBox, % newStr := RegExReplace(str, ",\d\d\K\d+")
Работает как надо.
str := % UserInput
Тут процент не нужен.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться