
Я попытался использовать calc
пакет для написания макроса, который печатает процент на основе двух чисел. Например: \printpercent{100}{200}
должно отображаться 50%, так как 100 — это середина от 200. Я перепробовал много разных комбинаций, но, похоже, не смог получить никаких осмысленных ответов. Ниже приведена лишь одна из многих формул, которые я пробовал:
\documentclass{article}
\usepackage{calc}
\newcounter{z}
\newcommand{\printpercent}[2]{%
\setcounter{z}{#1 / #2 * 100}
$#1/#2*100=\arabic{z}\%$
}%
\begin{document}
\printpercent{1}{100}
\printpercent{250}{200}
\end{document}
Это выводит:
1/100*100 = 0%
250/200*100 = 100%
- Как мне вычислить процент из этих чисел?
решение1
Расчеты только для целых чисел. #1
Сначала нужно умножить на 100.
\documentclass{article}
\usepackage{calc}
\newcounter{z}
\newcommand{\printpercent}[2]{%
\setcounter{z}{#1 * 100 / #2}
$#1/#2*100=\arabic{z}\%$
}%
\begin{document}
\printpercent{1}{100}
\printpercent{250}{200}
\end{document}
И проще использовать eTeX:
\newcommand\printpercent[2]{\the\numexpr#1*100/#2\%}
Если вам нужно более точное решение или входные данные не являются целочисленными значениями, вы можете использовать для этого пакеты fp
, fltpoint
, pgfmath
или l3fp
. Например:
\documentclass{article}
\usepackage{fp}
\newcommand\printpercent[2]{\FPeval\result{round(#1*100/#2,1)}\result\%}
\begin{document}
\printpercent{2.3}{100}
\printpercent{176.5}{190.375}
\end{document}
решение2
Другая возможность — использовать pgfmath
with siunitx
. Я не уверен, что точность всегда правильная, в этом случае можно использовать fpu
or fp
.
обновлять: Для пользователя, который работает с tikz
возможно заменить SI
на\pgfmathprintnumber
\documentclass{article}
\input{pgfutil-common.tex}
\usepackage{pgfkeys,pgfmath}
\usepackage{siunitx}
\newcommand{\printpercent}[3][2]{%
\pgfmathdivide{#2}{#3}%
\pgfmathmultiply{\pgfmathresult}{100}%
\SI[round-mode=places,round-precision=#1]{\pgfmathresult}{\percent}
}%
\begin{document}
\printpercent[0]{1}{100}
\printpercent{200}{250}
\printpercent{2}{3}
\end{document}