Milan earned 47 votes from the International Olympic Committee membership, compared to Stockholm's 34, prompting loud celebrations from the bid team, which had earlier included Prime Minister Giuseppe Conte.
"Italy, the future and sport have won," Italy's Deputy Prime Minister Matteo Salvini said back in Italy.
"Thanks to those who believed in it right away, especially in the Municipalities and Regions, and a pity for those who gave up.
"There will be at least five billion (euros) in added value, 20,000 jobs, as well as many new roads and sports facilities. With the Winter Olympics we will confirm our excellence and our skills to the world."
Milan and Stockholm were the only candidates left after four other cities -- Switzerland's Sion, Japan's Sapporo, Austria's Graz and 1988 hosts Calgary in Canada -- had dropped out of the race with concerns over the size and cost of the event.
Turkey's Erzurum was cut by the IOC.
"Congratulations to Milan-Cortina. We can look forward to outstanding and sustainable Olympic Winter Games in a traditional winter sports country," IOC President Thomas Bach said after announcing the winner.
"We will contribute to the success of these Games 925 million dollars. This will greatly facilitate the preparations and will be an important part of a great partnership we will enjoy with Cortina and Milan."
STRONG SUPPORT
The Games organisational budget is at $1.7 billion according to the bid file but that does not include infrastructure projects.
Bach said the strong public support in Italy of over 80% was a key factor, with Stockholm having had just over 50% of local support in a recent IOC-commissioned poll.
Stockholm's refusal to sign the host contract if the city won was another factor. Co-hosts Are would have done it.
"Gathering a bit the atmosphere when leaving the room my assumption is that what made the difference was the gap in the public support," Bach said.
"Public support goes hand in hand with political support and this was maybe also the reason why the city of Stockholm was not ready to sign the host city contract."
Italy last hosted the Winter Olympics in 2006 in Turin while Cortina staged the Winter Games back in 1956.
"I am really emotional because this is a very, very important result," said bid chief Giovanni Malago. "Not only for me but for the whole country. "What we did this afternoon is we represented successfully the images of our country."
Sweden, a winter sports powerhouse which hosted the Summer Olympics in 1912, has now bid eight times unsuccessfully for the Winter Games. Sweden also failed to land the 2004 Summer Olympics.
(Reporting by Karolos Grohmann; Additional reporting by Giselda Vagnoni in Italy, Editing by Ossian Shine and Ed Osmond)