Home > Software design >  Math.round method turns thousands into hundreds
Math.round method turns thousands into hundreds

Time:05-16

I'm trying to create a map-related calculator and I'm having a problem with the Math.Round method. Basically, I want the program to take the real-life length and the length on a map to calculate the scale of said map. After it calculates the scale it should round it from a double to an int. So for example the real-life length is 3000000 cm and the on map length equals 8,5 cm now after dividing these we get 352 941,176 that's our scalenoteven in this context. Now after rounding it, the scale should be 1:352 941 but instead the program gives me a scale of 1:352.

 double Scalenoteven;
 int Scaleeven;

//RealLengthincm and Maplength are taken from the user 
  Scalenoteven = RealLengthincm / MapLength;
  Scaleeven = (int)Math.Round(Scalenoteven, 1, MidpointRounding.ToEven);

CodePudding user response:

So with the added culture info and RealLengthincm = RealLength * 100; this should be working.

using System.Globalization;

double RealLength;
string RealLengthString;
double MapLength;
string MapLengthString;
double RealLengthincm;
double Scalenoteven;
int Scaleeven;

Console.WriteLine("Firstly will the real length be in meters or kilometers?");
string Answer;
Answer = Console.ReadLine();

if (Answer == "meters")
{
    Console.WriteLine("Alright!");
    Console.WriteLine("So what's the real length?");

    var culture = new CultureInfo("de-DE");

    RealLengthString = Console.ReadLine(); // assuming 30000
    RealLength = double.Parse(RealLengthString, culture);

    RealLengthincm = RealLength * 100;
    Console.WriteLine("now what's the length on the map in cm");

    MapLengthString = Console.ReadLine(); // assuming 8,5
    MapLength = double.Parse(MapLengthString, culture);

    //RealLengthincm and Maplength are taken from the user 
    Scalenoteven = RealLengthincm / MapLength;
    Scaleeven = (int)Math.Round(Scalenoteven, 0, MidpointRounding.ToZero);
    Console.WriteLine("The Scale is 1:"   Scaleeven); // outputs 1:352941
}
  • Related