What happens is the following: You declare x, y and z as integers, which as you know, have no floating points. When you do a calculation with these integers, the result will always be cast into another integer, unless you are making a calculation between an integer and a floating point type. In that case, the compiler chooses to cast the result to the most exact type. So casting one of them to float or double should solve the problem.
#include <iostream>
#include <iomanip>
using namespace std;
int main(int argc, char* argv[])
{
// convert string to integer and storing the first three arguments
double principal = atoi(argv[1]);
double rate = atoi(argv[2]);
int time = atoi(argv[3]);