Octo
Octo

Reputation: 53

How to get decimal remainder of two numbers divided?

So I am trying to make a script where the user inputs the number of miles they need to travel and the miles per hour they are traveling and the script outputs the hours and minutes leftover that they must travel. I've been trying to use % to find the remainder of the miles traveled/MPH but it outputs the wrong number. Is there anyway to only get the decimal from two divided numbers? For example, if I do 100/65 I get the output of about 1.538, I want to only use the 0.538. But when I use 100%65 I get 35. Here is my current script for reference:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TimeCalculator
{
     class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to the Travel Time Calculator");
            string answer;
            //creates variable for the answer
            do
            //creates loop to continue the application
            {
                string grade;
               //Console.WriteLine(100-(int)((double)100/65)*65);
                Console.WriteLine(" ");
                Console.Write("Enter miles: ");
                Decimal val1 = Convert.ToDecimal(Console.ReadLine());
               //converts input to decimal allowing user to use decimals
                Console.Write("Enter miles per hour: ");
                Decimal val2 = Convert.ToDecimal(Console.ReadLine());
                //converts input to decimal allowing user to use decimals
                Console.WriteLine(" ");
                Console.WriteLine("Estimated travel time");
                Console.WriteLine("Hours: " + (((int)val1 / (int)val2)));
                //converts values to integers and divides them to give hours traveled
                //double floor1 = Math.Floor(((double)val1/(double)val2));
                 Console.WriteLine("Minutes: " + (Decimal.Remainder((decimal)val1, (decimal)val2)));
            //converts values to double and gets the remainder of dividing both values to find minutes
            Console.WriteLine();
            //enters one line
            Console.Write("Continue? (y/n): ");
            answer = Console.ReadLine();
            //the string is equal to what the user inputs
            Console.WriteLine();
        }
        while (answer.ToUpper() == "Y");
        //if y, the application continues

}
}

Upvotes: 3

Views: 4508

Answers (2)

ndonohoe
ndonohoe

Reputation: 10230

If you want hours and minutes from the initial values then this should do it for you (you may need some explicit casts in there, this is untested)

var result = va1 / val2;   
var hours = Math.Floor(result);
var minutes = (result - hours) * 60;

Upvotes: 0

EZI
EZI

Reputation: 15364

100/65 is an integer division. What you need is

double d = (100d / 65) % 1;

This will give you 0.53846153846153855

Upvotes: 6

Related Questions