Kusal completed his ton off 82 deliveries with 17 fours and one six. It was his fifth century in ODI cricket. He ended up on 111 off 99 deliveries.
Kusal Mendis (43), Angelo Mathews (48) and Lahiru Thirimanne (25) also contributed well with the bat.
For Bangladesh, Shafiul Islam, who returned to the national team after three years, took the first wicket by removing Avishka Fernando for seven. Sri Lanka were then at 10.
However, in the second wicket stand, captain Dimuth Karunaratne and Kusal added 97 runs to repair the initial damage. Dimuth fell prey to Mehidy Hasan Miraz for 36 as the second Sri Lankan batsman.
The hosts never looked in trouble as Kusal Perera and Kusal Mendis added 100 runs in the third wicket stand. But Soumya Sarkar and Rubel Hossain removed them in two successive overs.
After 40 overs, Sri Lanka were 245 for four wickets. In the last 10 overs, they added 69 runs and lost four wickets.
For Bangladesh, Shafiul bagged three wickets conceding 62 runs in nine overs while Mustafizur Rahman took two for 75 runs in 10 overs.
Earlier, Sri Lanka won the toss and opted to bat first in the last ODI of Lasith Malinga. The Sri Lankan pacer announced that he will be unavailable for ODIs after this match.
Bangladesh playing XI: Tamim Iqbal(c), Soumya Sarkar, Mohammad Mithun, Mushfiqur Rahim(w), Mahmudullah, Mosaddek Hossain, Sabbir Rahman, Mehidy Hasan, Rubel Hossain, Shafiul Islam, Mustafizur Rahman
Sri Lanka playing XI: Dimuth Karunaratne(c), Kusal Perera(w), Avishka Fernando, Kusal Mendis, Angelo Mathews, Lahiru Thirimanne, Dhananjaya de Silva, Thisara Perera, Nuwan Pradeep, Lahiru Kumara, Lasith Malinga