Set 199 to win, Aftab Ahmed led the way with a blistering 81 not out off 87 balls while Mohammad Rafique made 72 off 66 balls, hitting 52 in boundaries, as the home side won with 17 overs to spare.
The pair tore the Zimbabwe bowling apart during a 150-run stand after the early loss of Nafis Iqbal in the third over.
The match was all but settled between the fourth and eighth over of the home team's reply as the score leapt from 18 for one to 71 without further loss.
Medium-pacer Elton Chigumbura was the chief sufferer. Brought on to stem th run flow, he managed one over before being taken off. Ahmed launched his first ball for six over fine leg and four more boundaries followed as 24 came off Chigumbura's six balls.
Bangladesh, who had been 2-0 down in the series, moved on to 85 after 10 overs and 141 for one after 20.
Chigumbura returned to remove Rafique, top-edging to short mid-wicket in the 25th over, but the home side cruised home, captain Habibul Bashar hitting the winning boundary.
Bangladesh, who hold the world record for 47 consecutive one-dayers without a win, won the two-match test series 1-0.
Earlier Barney Rogers had hit 84 out of Zimbabwe's 198, striking seven fours and a six in a 120-ball stay. He was one of only four batsmen to reach double figures as the last seven wickets collapsed for 37.
Zimbabwe skipper Tatenda Taibu elected to bat in front of a capacity crowed and his side were frustrated by Bangladesh's battery of left-arm spinners.
They seemed to have recovered from the early loss of Stuart Matsikenyeri, however, to reach 161 for three in the 41st over.
But Rogers's departure, stumped by keeper Khaled Mashud off spinner Enamul Haque junior, sparked a procession which also included two run-outs.