#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
int n; // + - * / ( ) = 优先级
char prior[7][7]={'>', '>', '<', '<', '<', '>', '>',
'>', '>', '<', '<', '<', '>', '>',
'>', '>', '>', '>', '<', '>', '>',
'>', '>', '>', '>', '<', '>', '>',
'<', '<', '<', '<', '<', '=', 0 ,
'>', '>', '>', '>', 0, '>', '>',
'<', '<', '<', '<', '<', 0, 0};
bool isnum(char ch)
{//判断是操作数还是操作符
if(ch!='='&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='('&&ch!=')')
return true;
else
return false;
}
int table(char ch)
{
switch(ch)
{
case '+':return 0;
case '-':return 1;
case '*':return 2;
case '/':return 3;
case '(':return 4;
case ')':return 5;
case '=':return 6;
}
}
double operate(double a,double b,char op)
{
switch(op)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
}
int main()
{
scanf("%d",&n);
getchar();
while(n--)
{
char ch;
double integer=0;//整数
double decimal=0;//小数
bool flag=0;
double num=0;
double times=10;
stack<char>opera;//operator操作符
stack<double>rand;//operand操作数
opera.push('=');
ch=getchar();
while(ch!='='||opera.top()!='=')
{
if(isnum(ch))
{
if(ch=='.')
{
flag=1;
ch=getchar();
}
num=ch-'0';
if(!flag)
{
integer=integer*10+num;
}
else
{
decimal=decimal+num/times;
times=times*10;
}
ch=getchar();
if(!isnum(ch))
{
flag=0;
times=10;
decimal=decimal+integer;
rand.push(decimal);
integer=0;
decimal=0;
}
}
else
{
int a=table(ch);
int b=table(opera.top());
switch(prior[b][a])
{
case '<'://新操作符如果优先级高于栈顶的操作符,新操作符入栈;
opera.push(ch);
ch=getchar();
break;
case '='://新操作符如果优先级等于栈顶的操作符,栈顶操作符出栈;
opera.pop();
ch=getchar();
break;
case '>'://新操作符优先级如果低于栈顶操作符,操作符栈顶出栈,两次操作数出栈,计算出的数字进入操作数栈
char opera1=opera.top();opera.pop();
double num1=rand.top();rand.pop();
double num2=rand.top();rand.pop();
rand.push(operate(num2,num1,opera1));
break;
}
}
}
printf("%.2lf\n",rand.top());
getchar();
}
return 0;
}