The Black Caps totalled an imposing 331 for six from their 50 overs, with Corey Anderson (75) top-scoring and Brendon McCullum (65), Kane Williamson (57) and Martin Guptill (49) also impressing.
Sri Lanka could only manage 233 in reply, with Lahiru Thirimanne (65) leading the way with the bat as five New Zealand bowlers each claimed two wickets.
The hosts started brightly after being put into bat, with Guptill and McCullum taking 77 from the first 10 overs.
Sri Lanka made their first breakthrough in the 16th over, with the scoreboard reading 111, when Jeevan Mendis caught McCullum just inside the boundary at long-off. The wicket, off the bowling of Rangana Herath, ended a 49-ball innings from McCullum which contained a six and 10 fours.
Guptill fell 25 runs later, for 49, when he got an outside edge to a Suranga Lakmal delivery and was caught by wicketkeeper Kumar Sangakkara.
Williamson and Ross Taylor had put on 57 in 67 deliveries when Dimuth Karunaratne caught Williamson off Mendis – and Taylor went with the next delivery, stumped by Sangakkara for 14.
The Black Caps have an impressive recent record for high scoring in the last 10 overs – and they did it again at the Hagley Oval, scoring 106 runs.
Anderson was dropped at cover by Mendis in the 46th over and Sri Lanka’s woes continued in the following over when Lasith Malinga bowled Luke Ronchi but was penalised for a no ball.
Anderson made them pay for the let-off in the closing stages, reaching his 50 off 36 balls and adding another 25 before being caught by Lakmal, at the second attempt, off the final delivery of the innings.
In reply, Tillakaratne Dilshan and Thirimanne put on 67 before Dilshan was caught and bowled by Daniel Vettori – then three wickets in 12 balls swung the match New Zealand’s way.
Thirimanne was bowled by Trent Boult, wicketkeeper Ronchi caught Mahela Jayawardene without scoring off Vettori, before Boult trapped Sangakkara lbw for 39 to leave Sri Lanka 129 for four.
Karunaratne was bowled by Adam Milne for 14 and it was 168 for six when Mendis was caught behind for four off the same bowler.
Anderson got his first wicket when Grant Elliott caught Nuwan Kulasekara for 10 – before the 42nd over saw Angelo Mathews (46) and Malinga (no score) fall to Tim Southee.
It was all over in the 47th over when Herath spooned an Anderson delivery to Milne at cover to depart for 13.
Scotland are New Zealand’s next opponents on Tuesday, with Sri Lanka not in action until February 22 – when they face Afghanistan.