Check this query:
selectdf.name AS LogicalFileName
, isnull(fg.name, 'Log') AS FilegroupName
, df.physical_name AS PhysicalOSName
, (df.size * 8 / 1024) AS SizeMBs
, (fileproperty(df.name, 'SpaceUsed') / 128) AS SpaceUsedMBs
, (df.size * 8 / 1024) - (fileproperty(df.name, 'SpaceUsed') / 128) AS FreeMBs
, case df.max_size
when 0 then 'No Growth'
when -1 then 'Unlimited'
when 268435456 then '2TB'
else cast(df.max_size / 128 AS VARCHAR(10)) + ' MBs'
end AS MaxFileSize
, case df.is_percent_growth
when 0 then cast(df.growth / 128 AS VARCHAR(10)) + ' MBs'
else CAST(df.growth AS VARCHAR(10)) + ' %'
end AS Growth
,cast(cast((fileproperty(df.name, 'SpaceUsed') / 128) as numeric(20,2)) /
cast(df.size / 128 as numeric(20,2))
* 100 as numeric(20,2)) as PercentUsed
from sys.database_files df left outer join sys.filegroups fg ON df.data_space_id = fg.data_space_id
order by df.type