Truncate Timespan after two decimal places - c#

I have a timespan that displays as such: 7.43053333333333. My goal is to simply display it as 7.43.
How would I truncate two the second value after the decimal place. I tried using Math.Round instead of truncating, but it would simnple return 7

Just use Math.Round Method (Decimal, Int32)
double d = 7.43053333333333;
double ma = Math.Round(d, 2);

Use Math.Round and supply number of digits to round
double roundedValue = Math.Round(7.43053333333333, 2);
You will get back 7.43

How would I truncate two the second value after the decimal place.
if you just want to truncate the double value to get 2 digits after precision.
Try This:
double d = 7.43053333333333;
String s = d.ToString("N2");

use Math.Round() like following
Math.Round(7.43053333333333, 2);

Related

How to add precision to decimal value

I want to add precision to the decimal value. For example, I have this value:
decimal number = 10;
I want to make it 10.00. I don't want to convert it to string like number.ToString("#.00")
Currently, I have this method:
decimal CalculatePrecision(decimal value, int precision)
{
var storedCalculated = decimal.Divide(1, Convert.ToDecimal(Math.Pow(10, precision)));
return value + storedCalculated - storedCalculated;
}
Is there any good solution for this?
You can't. 10 and 10.00 are the same number. Only the "presentation" is different. Both "presentations" are strings. The actual number look different. If you need to change the presentation, convert to string.
How about
decimal d = 10;
d += 0.00M;
Console.WriteLine(d);
Try reference
Math.Round not keeping the trailing zero
How do I display a decimal value to 2 decimal places?

Rounding Off a double value using Math.Round

I have a double value: 0.314285 which I want to Round off to 5 decimal places. From a mathematical point of view my expectant result is: 0.31429. In my code I use the Math.Round with MidPointRounding.AwayFromZero parameter overload, the resultant output being: 0.31428.
Is there another way to implement to have the output result as: 0.31429??
You should read the rounding and precision article. The real representation of your number in memory can be something like 0.3142849999999999, and therefore you are getting 0.31428 result. Using a decimal type can help to solve this issue
var value = 0.314285m;
var result = Math.Round(value, 5, MidpointRounding.AwayFromZero); //0.31429
public static double RoundUp(double i, int decimalPlaces)
{
var power = Math.Pow(10, decimalPlaces);
return Math.Ceiling(i * power) / power;
}
RoundDown(0.314285, 5); //0.31429
Math.Round(decimal number to round, int number of decimal places)
I think this should work for what you are trying to do.

Convert decimal with comma and floating point

i want to parse like:
3.5 -> 3.5
3.484 -> 3.48
3.82822 -> 3.82
etc.
However,
decimal.Parse("3.543")
yields 3543 and
so i did:
decimal.Parse("3.543",CultureInfo.InvariantCulture)
yields 3.543 and
but
decimal.Parse(String.Format("{0:0.00}","3.543"),CultureInfo.InvariantCulture);
yields 3543
so how can i do it???
You need Round method:
decimal t = 3.82822;
decimal.Round(t, 2);
Where 2 show the decimal points you need.
Use Math.Round like this:
decimal a = 1.9946456M;
Math.Round(a, 2); //returns 1.99
decimal b = 1.9953454M;
Math.Round(b, 2); //returns 2.00
I guess you want to truncate the decimal places after two digits. Give this a try:
public decimal TruncateDecimal(decimal value, int precision)
{
decimal step = (decimal)Math.Pow(10, precision);
int tmp = (int)Math.Truncate(step * value);
return tmp / step;
}
decimal t = 3.82822;
decimal d = TruncateDecimal(t, 2);
You should use a culture that actually uses a comma as a decimal seperator.
CultureInfo.GetCultureInfo("fr-fr")
for example.
Console.WriteLine(decimal.Parse("3,543", CultureInfo.InvariantCulture)); // 3543
Console.WriteLine(decimal.Parse("3,543", CultureInfo.GetCultureInfo("fr-fr"))); //3,543
and if you want to round the result. You could use
Console.WriteLine(String.Format("{0:0.00}", decimal.Parse("3,543", CultureInfo.GetCultureInfo("fr-fr")))); //3,54

Round to a certain decimal place

I am calculating the average of some values. Everything works fine.
What I want to do is to round the double to the 2nd decimal place.
e.g.
I would have 0.833333333333333333 displayed as
0.83
Is there anyway to do this?
Round the double itself like:
Math.Round(0.83333, 2, MidpointRounding.AwayFromZero);
(You should define MidpointRounding.AwayAwayFromZero to get the correct results. Default this function uses bankers rounding. read more about bankers rounding: http://www.xbeat.net/vbspeed/i_BankersRounding.htm so you can see why this won't give you the right results)
Or just the display value for two decimals:
myDouble.ToString("F");
Or for any decimals determined by the number of #
myDouble.ToString("#.##")
You say displays as - so that would be:
var d = value.ToString("f2");
See Standard numeric format strings
If you actually want to adjust the value down to 2dp then you can do what #middelpat has suggested.
Use
Math.Round(decimal d,int decimals);
as
Math.Round(0.833333333,2);
This will give you the result 0.83.
double d = 0.833333333333333333;
Math.Round(d, 2).ToString();
Try
decimalVar = 0.833333333333333333;
decimalVar.ToString ("#.##");
If you want to see 0.85781.. as 0.85, the easiest way is to multiply by 100, cast to int and divide by 100.
int val = (int)(0.833333333333333333 * 100);
var result = val /100;
It should produce the result you're looking for.

How to round a decimal for output?

Using C#, I want to format a decimal to only display two decimal places and then I will take that decimal and subtract it to another decimal. I would like to be able to do this without having to turn it into a string first to format and then convert it back to a decimal. I'm sorry I forget to specify this but I don't want to round, I just want to chop off the last decimal point. Is there a way to do this?
If you don't want to round the decimal, you can use Decimal.Truncate. Unfortunately, it can only truncate ALL of the decimals. To solve this, you could multiply by 100, truncate and divide by 100, like this:
decimal d = ...;
d = Decimal.Truncate(d * 100) / 100;
And you could create an extension method if you are doing it enough times
public static class DecimalExtensions
{
public static decimal TruncateDecimal(this decimal #this, int places)
{
int multipler = (int)Math.Pow(10, places);
return Decimal.Truncate(#this * multipler) / multipler;
}
}
You can use: Math.Round(number,2); to round a number to two decimal places.
See this specific overload of Math.Round for examples.
Math.Round Method (Decimal, Int32)
You don't want to format it then, but to round it. Try the Math.Round function.
Take a look at Math.Round

Categories