Общую численность карфагенской армии Полибий и Ливий определяют практически одинаково: десять тысяч конницы и сорок тысяч пехоты (у Полибия, конницы «до десяти тысяч», а пехоты «немногим больше сорока тысяч»; Полибий, III, 114, 5; Ливий, XXII, 46, 6). Как уже говорилось, они должны были противостоять примерно семидесяти семи тысячам римлян (десять тысяч были оставлены охранять лагерь).
Построение обеих армий было завершено без каких-либо помех. Хотя римляне были обращены к югу, восходящее солнце пока не причиняло ни им, ни пунийцам никаких неудобств, зато юго-восточный ветер (сирокко) нес тучи пыли прямо в лицо легионерам, затрудняя зрение и дыхание (Ливий, XXII, 46, 9).
Сражение началось боем легкой пехоты, успех в котором поначалу не склонялся ни на ту, ни на другую сторону. Для римлян, однако, его итоги оказались более чувствительными – камнем, выпущенным балеарским пращником, был тяжело ранен Луций Эмилий Павел. Вскоре затем началась конная схватка на левом, примыкающем к реке фланге карфагенян. Места там было мало, поэтому всадники не могли ни обойти друг друга, ни вообще как-либо маневрировать. Вынужденные сражаться фактически не сходя с места, римские и кельтско-иберийские всадники отчаянно дрались, стаскивали друг друга с коней и продолжали бой уже пешими. Довольно скоро римляне начали уступать и вскоре обратились в бегство вдоль реки, оголяя свой правый фланг.
К этому времени закончилась перестрелка между легковооруженными воинами и в дело вступили главные силы армий. Кельты и иберы стойко приняли на себя натиск огромной массы римской пехоты и на первых порах сдерживали его. Но силы были неравны, и постепенно римляне все больше теснили врага, буквально продавливая центр боевого порядка карфагенян, который из полумесяца, выгнутого вперед, вначале превратился в ровную линию, а потом прогнулся уже в обратную сторону. Вместе с тем строй римлян чем дальше, тем сильнее сужался, легионеры скапливались к середине, так что фланги карфагенской пехоты оставались незадействованными. Увлекшись попыткой прорыва, римляне, сами того не замечая, оказались в полукольце.
В этой ситуации Ганнибалу даже не было необходимости давать соответствующий сигнал – его воины сами видели, что им делать. Оказавшиеся по обе стороны от вражеского построения ливийцы развернулись к центру и ударили во фланги римлян, а также отрезали их с тыла.
Это был решающий момент сражения. Превратившись в одночасье из победителей в окруженных, римляне утратили инициативу и теперь пытались только спасти себе жизнь. Последний призрачный шанс выправить положение еще сохранялся, пока бой на левом фланге римской армии вела конница союзников. Противостоявшие ей нумидийцы использовали свою обычную тактику, атакуя и вновь отходя назад, так что довольно продолжительное время обе стороны сражались без особых результатов. Но вот из преследования разбитых ранее римских всадников на поле боя вернулась кельтско-иберийская конница Гасдрубала и ударила в тыл союзникам, которые, завидев их, сразу обратились в бегство. (Тит Ливий, впрочем, объясняет разгром левого фланга римлян применением врагами «пунийской хитрости». По его словам, в ходе боя около пятисот нумидийцев, спрятав мечи под доспехами, сдались союзникам и были отведены за строй, а потом, обнажив оружие, атаковали их с тыла (Ливий, XXII, 48, 1–4). Однако здесь, скорее всего, перед нами лишь легенда, списывающая собственные неудачи на прославленное коварство врага.) Оценив ситуацию, Гасдрубал бросил нумидийцев в погоню за римскими союзниками, а сам со своим отрядом ударил в тыл римской пехоте.
Окруженные со всех сторон римляне защищались из последних сил. Усталые, охваченные паникой (вспомним, что для большей части легионеров это был первый бой в жизни), стесненные со всех сторон своими же боевыми товарищами, они массами гибли от оружия карфагенян, у которых даже не было особой необходимости вступать в рукопашную: каждый камень, дротик или стрела, пущенные в толпу, находили свою цель. О том, насколько они оказались деморализованы, свидетельствует, пожалуй, то, что ни один из античных авторов не упоминает о каких-либо организованных попытках вырваться из котла, хотя явно в течение довольно долгого времени окруженные римляне сохраняли численный перевес над своим противником. Римские военачальники ничего не могли сделать, кроме как погибнуть вместе со своими солдатами, подобно Эмилию Павлу, о смерти которого Ливий рассказывает с романтическими (и явно выдуманными) подробностями (Ливий, XXII, 49, 6–12). Слабея от раны, тот лично водил в атаку всадников, но потом, очевидно, когда правый фланг был разбит, перешел в центр и до конца сражался в пешем строю. Гаю Теренцию Варрону удалось спастись и вместе с горсткой всадников уйти в Венусию (Полибий, III, 117, 2).