Bangladesh's miserable Asia Cup campaign finished without victory after Sri Lanka claimed a battling three-wicket win in Mirpur.
Captain Angelo Mathews' 74 not out steered Sri Lanka home after they hit trouble in pursuit of 204 for nine.
The visitors crashed to 75 for five, but an 82-run stand between Mathews and Chaturanga de Silva, who contributed 44, swung the match.
Sri Lanka had already booked their place in Saturday's final against Pakistan.
Bangladesh reached the Asia Cup final two years ago, when the tournament was also held on home soil, but will now host the World Twenty20 low on confidence.
Mushfiqur Rahim's side most significantly lost to Afghanistan - the first time a Test-playing nation has done so - and will face them in the World T20 opener here at the Shere Bangla National Stadium on March 16.
Anamul Haque top-scored for Bangladesh, falling one run short of a half-century, with fellow opener Shamsur Rahman adding 39.
Al-Amin Hossain then removed Kusal Perera and Kumar Sangakkara in his first two overs of Sri Lanka's reply before Mahela Jayawardene was run out without scoring.
With his two most experienced campaigners gone early, Mathews stood up under pressure to ensure Sri Lanka won with an over to spare and carried a 100 per cent record into the final.
Mathews has only been dismissed once in his last six one-day internationals and has scored three unbeaten half-centuries and 45 not out during this purple patch.