TimeSpan.Days returns an int representing whole days (positive or negative), while TimeSpan.TotalDays returns a double representing whole and fractional days (positive or negative).

All of these are obvious for positive timespan values:

new TimeSpan(2, 18, 0, 0).Days == 2
new TimeSpan(2, 18, 0, 0).TotalDays == 2.75
new TimeSpan(2, 18, 0, 0).ToString() == "2.18:00:00"

new TimeSpan(2, -18, 0, 0).Days == 1
new TimeSpan(2, -18, 0, 0).TotalDays == 1.25
new TimeSpan(2, -18, 0, 0).ToString() == "1.06:00:00"

But may be unexpected to some for negative timespan values:

new TimeSpan(-2, -18, 0, 0).Days == -2
new TimeSpan(-2, -18, 0, 0).TotalDays == -2.75
new TimeSpan(-2, -18, 0, 0).ToString() == "-2.18:00:00"

new TimeSpan(-2, 18, 0, 0).Days == -1
new TimeSpan(-2, 18, 0, 0).TotalDays == -1.25
new TimeSpan(-2, 18, 0, 0).ToString() == "-1.06:00:00"

The key is that each component of a TimeSpan with negative value is itself a negative value or 0, and vice versa.

And here is the relationship between TimeSpan.TotalDays (x) and TimeSpan.Days (y):

TimeSpan.Days and .TotalDays

See it on Wolfram | Alpha

We can see that the span when TimeSpan.Days (y) is 0 extends to 2 days actually.

This relationship applies to TotalHours/Hours, TotalMinutes/Minutes, etc. as well.