Dhiraj Sardal
Dhiraj Sardal

Reputation: 535

Format int to string with decimals

I am trying to format a string using string.Format method to produce a fixed decimal string from an int data type.

I have tried following code :

sOutputString = string.Format(
  "Days:{0:D1} Hours:{1:D1} Minutes:{2:D1} Seconds:{3:D1} Miliseconds:{4:D1}",
   objTimeCalculate.Days,
   objTimeCalculate.Hours,
   objTimeCalculate.Minutes,
   objTimeCalculate.Seconds,
   objTimeCalculate.Miliseconds);

The values of the properties Days, Hours, Minutes, Seconds are int data type and formatted using the D format specified. However I need decimal values produced in the string.

Output should be :

sOutputString = Days : double_value Hours : double_value Minutes : double_value Seconds : double_value Miliseconds : integer_value

Since the property days can go beyond reach of the integer datatypes reach.

Upvotes: 0

Views: 436

Answers (2)

Nico
Nico

Reputation: 12683

Given that objTimeCalculate is a TimeSpan all those variables are int. Therefore they dont have a decimal value.

However we could use the format string F1 which will return with a fixed decimal value, however this will always be 0.

Example:

var objTimeCalculate =(DateTime.Now - DateTime.UtcNow);

var sOutputString = string.Format(
    "Days:{0:F1} Hours:{1:F1} Minutes:{2:F1} Seconds:{3:F1} Miliseconds:{4:F1}",
    objTimeCalculate.Days,
    objTimeCalculate.Hours,
    objTimeCalculate.Minutes,
    objTimeCalculate.Seconds,
    objTimeCalculate.Milliseconds);

Result:

Days:0.0 Hours:9.0 Minutes:29.0 Seconds:59.0 Miliseconds:996.0

You can consult Standard Numeric Format Strings for more details.

"F" or "f" Fixed-point

Result: Integral and decimal digits with optional negative sign. Supported by: All numeric types. Precision specifier: Number of decimal digits. Default precision specifier: Defined by NumberFormatInfo.NumberDecimalDigits.

The Fixed-Point ("F") Format Specifier.

Upvotes: 2

Paweł Dyl
Paweł Dyl

Reputation: 9143

You are looking F specifier:

sOutputString = string.Format(
  "Days:{0:F2} Hours:{1:F2} Minutes:{2:F2} Seconds:{3:F2} Miliseconds:{4:F2}",
   objTimeCalculate.Days,
   objTimeCalculate.Hours,
   objTimeCalculate.Minutes,
   objTimeCalculate.Seconds,
   objTimeCalculate.Miliseconds);

Upvotes: 0

Related Questions