Reputation: 25
I'm working on a temperature converter, at the end the program has to put out Fahrenheit to Celsius or vice versa in an arranged way, like the image here
meaning the C, F and = have to be aligned on each row, I tried string.Format but it only gives me errors.
for (Farenheit = 0; Farenheit <= maxFarenheit; Farenheit = Farenheit + 5)
{
Celsius = 5 / 9.0 * (Farenheit - 32);
Celsius = Math.Round(Celsius, 2);
Console.WriteLine(Farenheit + " F = " + Celsius + " C");
}
This the loop
Upvotes: 2
Views: 99
Reputation: 29264
If you want
0.00 C = 32.00 F
4.00 C = 39.20 F
8.00 C = 46.40 F
12.00 C = 53.60 F
16.00 C = 60.80 F
20.00 C = 68.00 F
24.00 C = 75.20 F
28.00 C = 82.40 F
32.00 C = 89.60 F
36.00 C = 96.80 F
40.00 C = 104.00 F
44.00 C = 111.20 F
48.00 C = 118.40 F
The use format specifies a column width inside an interpolated string. This is done with $"{value,width:format}"
. See the example code below:
Since this is C# and object-oriented in makes sense to create a class to handle the math.
public class Temperature
{
public float Celsius { get; set; }
public float Fahrenheit
{
get
{
return 32f + (9f * Celsius) / 5f;
}
set
{
Celsius = 5f * (value - 32F) / 9F;
}
}
}
class Program
{
static void Main(string[] args)
{
Temperature temperature = new Temperature();
for (int i = 0; i <= 12; i++)
{
temperature.Celsius = 4f * i;
Console.WriteLine($"{temperature.Celsius,6:F2} C = {temperature.Fahrenheit,6:F2} F");
}
}
}
Here the value of 6
designates the total width the value will occupy (6 spaces) and is justified by default. To make the value be left justified use a negative value, like -6
.
Also, the specifier F2
means to show two decimal places to the right of the point. For floating point values, use specifiers like g4
for general formatting, f4
for fixed # decimals, and e4
for scientific notation.
An improvement can be made to include the string formatting inside the class, as in the code below with identical results.
public class Temperature
{
public float Celsius { get; set; }
public float Farenheit
{
get
{
return 32f + (9f * Celsius) / 5f;
}
set
{
Celsius = 5f * (value - 32F) / 9F;
}
}
public override string ToString()
{
return $"{Celsius,6:F2} C = {Fahrenheit,6:F2} F";
}
}
class Program
{
static void Main(string[] args)
{
Temperature temperature = new Temperature();
for (int i = 0; i <= 12; i++)
{
temperature.Celsius = 4f * i;
Console.WriteLine(temperature);
}
}
}
The key here is to override the ToString()
function that the system uses to convert an object to a string value. It is called automatically by the Console.WriteLine()
function and the point is that all formatting can be handled internally from the class.
Upvotes: 3