diff --git a/ChangeLog b/ChangeLog
index 319bde9bfa1b7f0733a70e00d0ffc85802331fe2..ac0f5d5e9c373fc17c1e0a3b9299d5d0f73c4240 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
 --------------------------------------------------------------
 English Dolibarr ChangeLog
 --------------------------------------------------------------
+***** ChangeLog for 3.4.2 compared to 3.4.1 *****
+Fix: Bad rounding on margin calculations and display
 
 ***** ChangeLog for 3.4.1 compared to 3.4.0 *****
 Fix: Display buying price on line edit when no supplier price is defined
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index f6a1d7ef32c201523c8d26b2a15111c4b2467e96..8343c219d3107acc59ca464d2f431de8c924909a 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -2,7 +2,7 @@
 /* Copyright (C) 2006-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
  * Copyright (C) 2010-2011 Juanjo Menent        <jmenent@2byte.es>
- * Copyright (C) 2012      Christophe Battarel  <christophe.battarel@altairis.fr>
+ * Copyright (C) 2012-2013 Christophe Battarel  <christophe.battarel@altairis.fr>
  * Copyright (C) 2011-2012 Philippe Grand	    <philippe.grand@atoo-net.com>
  * Copyright (C) 2012      Marcos GarcĂ­a        <marcosgdf@gmail.com>
  *
@@ -3175,14 +3175,14 @@ abstract class CommonObject
 			}
 		}
 		if ($marginInfos['pa_products'] > 0)
-			$marginInfos['margin_rate_products'] = 100 * round($marginInfos['margin_on_products'] / $marginInfos['pa_products'],5);
+			$marginInfos['margin_rate_products'] = 100 * $marginInfos['margin_on_products'] / $marginInfos['pa_products'];
 		if ($marginInfos['pv_products'] > 0)
-			$marginInfos['mark_rate_products'] = 100 * round($marginInfos['margin_on_products'] / $marginInfos['pv_products'],5);
+			$marginInfos['mark_rate_products'] = 100 * $marginInfos['margin_on_products'] / $marginInfos['pv_products'];
 
 		if ($marginInfos['pa_services'] > 0)
-			$marginInfos['margin_rate_services'] = 100 * round($marginInfos['margin_on_services'] / $marginInfos['pa_services'],5);
+			$marginInfos['margin_rate_services'] = 100 * $marginInfos['margin_on_services'] / $marginInfos['pa_services'];
 		if ($marginInfos['pv_services'] > 0)
-			$marginInfos['mark_rate_services'] = 100 * round($marginInfos['margin_on_services'] / $marginInfos['pv_services'],5);
+			$marginInfos['mark_rate_services'] = 100 * $marginInfos['margin_on_services'] / $marginInfos['pv_services'];
 
 		// if credit note, margin = -1 * (abs(selling_price) - buying_price)
 		if ($marginInfos['pv_total'] < 0)
@@ -3190,9 +3190,9 @@ abstract class CommonObject
 		else
 			$marginInfos['total_margin'] = $marginInfos['pv_total'] - $marginInfos['pa_total'];
 		if ($marginInfos['pa_total'] > 0)
-			$marginInfos['total_margin_rate'] = 100 * round($marginInfos['total_margin'] / $marginInfos['pa_total'],5);
+			$marginInfos['total_margin_rate'] = 100 * $marginInfos['total_margin'] / $marginInfos['pa_total'];
 		if ($marginInfos['pv_total'] > 0)
-			$marginInfos['total_mark_rate'] = 100 * round($marginInfos['total_margin'] / $marginInfos['pv_total'],5);
+			$marginInfos['total_mark_rate'] = 100 * $marginInfos['total_margin'] / $marginInfos['pv_total'];
 
 		return $marginInfos;
 	}
@@ -3209,6 +3209,8 @@ abstract class CommonObject
 
     	if (! empty($user->societe_id)) return;
 
+        $rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
+        
 		$marginInfo = $this->getMarginInfos($force_price);
 
 		print '<table class="noborder" width="100%">';
@@ -3228,34 +3230,34 @@ abstract class CommonObject
 		//if ($marginInfo['margin_on_products'] != 0 && $marginInfo['margin_on_services'] != 0) {
 		print '<tr class="impair">';
 		print '<td>'.$langs->trans('MarginOnProducts').'</td>';
-		print '<td align="right">'.price($marginInfo['pv_products']).'</td>';
-		print '<td align="right">'.price($marginInfo['pa_products']).'</td>';
-		print '<td align="right">'.price($marginInfo['margin_on_products']).'</td>';
+		print '<td align="right">'.price($marginInfo['pv_products'], null, null, null, null, $rounding).'</td>';
+		print '<td align="right">'.price($marginInfo['pa_products'], null, null, null, null, $rounding).'</td>';
+		print '<td align="right">'.price($marginInfo['margin_on_products'], null, null, null, null, $rounding).'</td>';
 		if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-			print '<td align="right">'.(($marginInfo['margin_rate_products'] == '')?'n/a':price($marginInfo['margin_rate_products']).'%').'</td>';
+			print '<td align="right">'.(($marginInfo['margin_rate_products'] == '')?'n/a':price($marginInfo['margin_rate_products'], null, null, null, null, $rounding).'%').'</td>';
 		if (! empty($conf->global->DISPLAY_MARK_RATES))
-			print '<td align="right">'.(($marginInfo['mark_rate_products'] == '')?'n/a':price($marginInfo['mark_rate_products']).'%').'</td>';
+			print '<td align="right">'.(($marginInfo['mark_rate_products'] == '')?'n/a':price($marginInfo['mark_rate_products'], null, null, null, null, $rounding).'%').'</td>';
 		print '</tr>';
 		print '<tr class="pair">';
 		print '<td>'.$langs->trans('MarginOnServices').'</td>';
-		print '<td align="right">'.price($marginInfo['pv_services']).'</td>';
-		print '<td align="right">'.price($marginInfo['pa_services']).'</td>';
-		print '<td align="right">'.price($marginInfo['margin_on_services']).'</td>';
+		print '<td align="right">'.price($marginInfo['pv_services'], null, null, null, null, $rounding).'</td>';
+		print '<td align="right">'.price($marginInfo['pa_services'], null, null, null, null, $rounding).'</td>';
+		print '<td align="right">'.price($marginInfo['margin_on_services'], null, null, null, null, $rounding).'</td>';
 		if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-			print '<td align="right">'.(($marginInfo['margin_rate_services'] == '')?'n/a':price($marginInfo['margin_rate_services']).'%').'</td>';
+			print '<td align="right">'.(($marginInfo['margin_rate_services'] == '')?'n/a':price($marginInfo['margin_rate_services'], null, null, null, null, $rounding).'%').'</td>';
 		if (! empty($conf->global->DISPLAY_MARK_RATES))
-			print '<td align="right">'.(($marginInfo['mark_rate_services'] == '')?'n/a':price($marginInfo['mark_rate_services']).'%').'</td>';
+			print '<td align="right">'.(($marginInfo['mark_rate_services'] == '')?'n/a':price($marginInfo['mark_rate_services'], null, null, null, null, $rounding).'%').'</td>';
 		print '</tr>';
 		//}
 		print '<tr class="impair">';
 		print '<td>'.$langs->trans('TotalMargin').'</td>';
-		print '<td align="right">'.price($marginInfo['pv_total']).'</td>';
-		print '<td align="right">'.price($marginInfo['pa_total']).'</td>';
-		print '<td align="right">'.price($marginInfo['total_margin']).'</td>';
+		print '<td align="right">'.price($marginInfo['pv_total'], null, null, null, null, $rounding).'</td>';
+		print '<td align="right">'.price($marginInfo['pa_total'], null, null, null, null, $rounding).'</td>';
+		print '<td align="right">'.price($marginInfo['total_margin'], null, null, null, null, $rounding).'</td>';
 		if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-			print '<td align="right">'.(($marginInfo['total_margin_rate'] == '')?'n/a':price($marginInfo['total_margin_rate']).'%').'</td>';
+			print '<td align="right">'.(($marginInfo['total_margin_rate'] == '')?'n/a':price($marginInfo['total_margin_rate'], null, null, null, null, $rounding).'%').'</td>';
 		if (! empty($conf->global->DISPLAY_MARK_RATES))
-			print '<td align="right">'.(($marginInfo['total_mark_rate'] == '')?'n/a':price($marginInfo['total_mark_rate']).'%').'</td>';
+			print '<td align="right">'.(($marginInfo['total_mark_rate'] == '')?'n/a':price($marginInfo['total_mark_rate'], null, null, null, null, $rounding).'%').'</td>';
 		print '</tr>';
 		print '</table>';
 	}
diff --git a/htdocs/core/tpl/objectline_view.tpl.php b/htdocs/core/tpl/objectline_view.tpl.php
index dcb46ac1857b166643c524ec222f5139effed396..742a1ff7061a4bd5aa845e8f976731db39b689d4 100644
--- a/htdocs/core/tpl/objectline_view.tpl.php
+++ b/htdocs/core/tpl/objectline_view.tpl.php
@@ -1,7 +1,7 @@
 <?php
 /* Copyright (C) 2010-2013	Regis Houssin		<regis.houssin@capnetworks.com>
  * Copyright (C) 2010-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
- * Copyright (C) 2012		Christophe Battarel	<christophe.battarel@altairis.fr>
+ * Copyright (C) 2012-2013	Christophe Battarel	<christophe.battarel@altairis.fr>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -120,14 +120,15 @@
 	<?php }
 
   if (! empty($conf->margin->enabled) && empty($user->societe_id)) {
+	$rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
   ?>
   	<td align="right" class="nowrap"><?php echo price($line->pa_ht); ?></td>
   	<?php if (! empty($conf->global->DISPLAY_MARGIN_RATES)) {?>
-  	  <td align="right" class="nowrap"><?php echo (($line->pa_ht == 0)?'n/a':price($line->marge_tx).'%'); ?></td>
+  	  <td align="right" class="nowrap"><?php echo (($line->pa_ht == 0)?'n/a':price($line->marge_tx, null, null, null, null, $rounding).'%'); ?></td>
   	<?php
   }
   if (! empty($conf->global->DISPLAY_MARK_RATES)) {?>
-  	  <td align="right" class="nowrap"><?php echo price($line->marque_tx).'%'; ?></td>
+  	  <td align="right" class="nowrap"><?php echo price($line->marque_tx, null, null, null, null, $rounding).'%'; ?></td>
   <?php } } ?>
 
 	<?php if ($line->special_code == 3)	{ ?>
diff --git a/htdocs/margin/agentMargins.php b/htdocs/margin/agentMargins.php
index dc858d66b76b15d8104ce30f2f6e73e764f3d8e8..9836b6408c3d5819a849a16e6a22c5893f57e947 100644
--- a/htdocs/margin/agentMargins.php
+++ b/htdocs/margin/agentMargins.php
@@ -172,9 +172,6 @@ if ($result)
 		print_liste_field_titre($langs->trans("MarkRate"),$_SERVER["PHP_SELF"],"","","&amp;agentid=".$agentid,'align="right"',$sortfield,$sortorder);
 	print "</tr>\n";
 
-	$cumul_achat = 0;
-	$cumul_vente = 0;
-	$cumul_qty = 0;
 	$rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
 
 	if ($num > 0)
@@ -191,13 +188,13 @@ if ($result)
 
 			if ($marge < 0)
 			{
-				$marginRate = ($pa != 0)?-1*(100 * round($marge / $pa, 5)):'' ;
-				$markRate = ($pv != 0)?-1*(100 * round($marge / $pv, 5)):'' ;
+				$marginRate = ($pa != 0)?-1*(100 * $marge / $pa):'' ;
+				$markRate = ($pv != 0)?-1*(100 * $marge / $pv):'' ;
 			}
 			else
 			{
-				$marginRate = ($pa != 0)?(100 * round($marge / $pa, 5)):'' ;
-				$markRate = ($pv != 0)?(100 * round($marge / $pv, 5)):'' ;
+				$marginRate = ($pa != 0)?(100 * $marge / $pa):'' ;
+				$markRate = ($pv != 0)?(100 * $marge / $pv):'' ;
 			}
 
 			$var=!$var;
@@ -214,18 +211,16 @@ if ($result)
 				print "<td>".$userstatic->getFullName($langs,0,0,0)."</td>\n";
 			}
 
-			print "<td align=\"right\">".price($pv)."</td>\n";
-			print "<td align=\"right\">".price($pa)."</td>\n";
-			print "<td align=\"right\">".price($marge)."</td>\n";
+			print "<td align=\"right\">".price($pv, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($pa, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($marge, null, null, null, null, $rounding)."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARK_RATES))
-				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 			print "</tr>\n";
 
 			$i++;
-			$cumul_achat += round($objp->buying_price, $rounding);
-			$cumul_vente += round($objp->selling_price, $rounding);
 		}
 	}
 	print "</table>";
diff --git a/htdocs/margin/customerMargins.php b/htdocs/margin/customerMargins.php
index c42f73bb87cb36854b147dd741228db76c85e3f7..e4f29260e09266103c8eb5ff175cda4b9bc169f1 100644
--- a/htdocs/margin/customerMargins.php
+++ b/htdocs/margin/customerMargins.php
@@ -213,7 +213,7 @@ if ($result)
 
 	$cumul_achat = 0;
 	$cumul_vente = 0;
-	$cumul_qty = 0;
+	
 	$rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
 
 	if ($num > 0)
@@ -230,13 +230,13 @@ if ($result)
 
 			if ($marge < 0)
 			{
-				$marginRate = ($pa != 0)?-1*(100 * round($marge / $pa, 5)):'' ;
-				$markRate = ($pv != 0)?-1*(100 * round($marge / $pv, 5)):'' ;
+				$marginRate = ($pa != 0)?-1*(100 * $marge / $pa):'' ;
+				$markRate = ($pv != 0)?-1*(100 * $marge / $pv):'' ;
 			}
 			else
 			{
-				$marginRate = ($pa != 0)?(100 * round($marge / $pa, 5)):'' ;
-				$markRate = ($pv != 0)?(100 * round($marge / $pv, 5)):'' ;
+				$marginRate = ($pa != 0)?(100 * $marge / $pa):'' ;
+				$markRate = ($pv != 0)?(100 * $marge / $pv):'' ;
 			}
 
 			$var=!$var;
@@ -258,18 +258,18 @@ if ($result)
 		   		print "<td>".$companystatic->getNomUrl(1,'customer')."</td>\n";
 		  	}
 
-			print "<td align=\"right\">".price($pv)."</td>\n";
-			print "<td align=\"right\">".price($pa)."</td>\n";
-			print "<td align=\"right\">".price($marge)."</td>\n";
+			print "<td align=\"right\">".price($pv, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($pa, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($marge, null, null, null, null, $rounding)."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARK_RATES))
-				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 			print "</tr>\n";
 
 			$i++;
-			$cumul_achat += round($objp->buying_price, $rounding);
-			$cumul_vente += round($objp->selling_price, $rounding);
+			$cumul_achat += $objp->buying_price;
+			$cumul_vente += $objp->selling_price;
 		}
 	}
 
@@ -278,13 +278,13 @@ if ($result)
 	$totalMargin = $cumul_vente - $cumul_achat;
 	if ($totalMargin < 0)
 	{
-		$marginRate = ($cumul_achat != 0)?-1*(100 * round($totalMargin / $cumul_achat, 5)):'';
-		$markRate = ($cumul_vente != 0)?-1*(100 * round($totalMargin / $cumul_vente, 5)):'';
+		$marginRate = ($cumul_achat != 0)?-1*(100 * $totalMargin / $cumul_achat):'';
+		$markRate = ($cumul_vente != 0)?-1*(100 * $totalMargin / $cumul_vente):'';
 	}
 	else
 	{
-		$marginRate = ($cumul_achat != 0)?(100 * round($totalMargin / $cumul_achat, 5)):'';
-		$markRate = ($cumul_vente != 0)?(100 * round($totalMargin / $cumul_vente, 5)):'';
+		$marginRate = ($cumul_achat != 0)?(100 * $totalMargin / $cumul_achat):'';
+		$markRate = ($cumul_vente != 0)?(100 * $totalMargin / $cumul_vente):'';
 	}
 
 	print '<tr '.$bc[$var].' style="border-top: 1px solid #ccc; font-weight: bold">';
@@ -293,13 +293,13 @@ if ($result)
   	else
     	print '<td>';
   	print $langs->trans('TotalMargin')."</td>";
-	print "<td align=\"right\">".price($cumul_vente)."</td>\n";
-	print "<td align=\"right\">".price($cumul_achat)."</td>\n";
-	print "<td align=\"right\">".price($totalMargin)."</td>\n";
+	print "<td align=\"right\">".price($cumul_vente, null, null, null, null, $rounding)."</td>\n";
+	print "<td align=\"right\">".price($cumul_achat, null, null, null, null, $rounding)."</td>\n";
+	print "<td align=\"right\">".price($totalMargin, null, null, null, null, $rounding)."</td>\n";
 	if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-		print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+		print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 	if (! empty($conf->global->DISPLAY_MARK_RATES))
-		print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+		print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 	print "</tr>\n";
 
   print "</table>";
@@ -325,9 +325,9 @@ $(document).ready(function() {
      $("div.fiche form").submit();
   });
 
-	$("#totalMargin").html("<?php echo price($totalMargin); ?>");
-	$("#marginRate").html("<?php echo (($marginRate === '')?'n/a':price($marginRate)."%"); ?>");
-	$("#markRate").html("<?php echo (($markRate === '')?'n/a':price($markRate)."%"); ?>");
+	$("#totalMargin").html("<?php echo price($totalMargin, null, null, null, null, $rounding); ?>");
+	$("#marginRate").html("<?php echo (($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%"); ?>");
+	$("#markRate").html("<?php echo (($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%"); ?>");
 
 });
 </script>
diff --git a/htdocs/margin/lib/margins.lib.php b/htdocs/margin/lib/margins.lib.php
index bfa5d530e295579f31910d9b2bf5899c0b5b8a4a..6d1ded0341914fe17513f99b7489198d32ace665 100644
--- a/htdocs/margin/lib/margins.lib.php
+++ b/htdocs/margin/lib/margins.lib.php
@@ -125,10 +125,10 @@ function getMarginInfos($pvht, $remise_percent, $tva_tx, $localtax1_tx, $localta
 
 	// calcul taux marge
 	if ($paht_ret != 0)
-		$marge_tx_ret = round((100 * $marge) / $paht_ret, 3);
+		$marge_tx_ret = (100 * $marge) / $paht_ret;
 	// calcul taux marque
 	if ($pu_ht_remise != 0)
-		$marque_tx_ret = round((100 * $marge) / $pu_ht_remise, 3);
+		$marque_tx_ret = (100 * $marge) / $pu_ht_remise;
 
 	return array($paht_ret, $marge_tx_ret, $marque_tx_ret);
 }
diff --git a/htdocs/margin/productMargins.php b/htdocs/margin/productMargins.php
index 334f8f998bde924a14f716f11797fa109a3f9d48..931f2f54951b164ea5d583a3ba6e08cc3c8b36f4 100644
--- a/htdocs/margin/productMargins.php
+++ b/htdocs/margin/productMargins.php
@@ -217,7 +217,6 @@ if ($result)
 
 	$cumul_achat = 0;
 	$cumul_vente = 0;
-	$cumul_qty = 0;
 	$rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
 
 	if ($num > 0)
@@ -233,13 +232,13 @@ if ($result)
 
 			if ($marge < 0)
 			{
-				$marginRate = ($pa != 0)?-1*(100 * round($marge / $pa, 5)):'' ;
-				$markRate = ($pv != 0)?-1*(100 * round($marge / $pv, 5)):'' ;
+				$marginRate = ($pa != 0)?-1*(100 * $marge / $pa):'' ;
+				$markRate = ($pv != 0)?-1*(100 * $marge / $pv):'' ;
 			}
 			else
 			{
-				$marginRate = ($pa != 0)?(100 * round($marge / $pa, 5)):'' ;
-				$markRate = ($pv != 0)?(100 * round($marge / $pv, 5)):'' ;
+				$marginRate = ($pa != 0)?(100 * $marge / $pa):'' ;
+				$markRate = ($pv != 0)?(100 * $marge / $pv):'' ;
 			}
 
 			$var=!$var;
@@ -263,18 +262,18 @@ if ($result)
 				$text.= ' - '.$objp->label;
 				print "<td>".$product_static->getNomUrl(1)."</td>\n";
 			}
-			print "<td align=\"right\">".price($pv)."</td>\n";
-			print "<td align=\"right\">".price($pa)."</td>\n";
-			print "<td align=\"right\">".price($marge)."</td>\n";
+			print "<td align=\"right\">".price($pv, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($pa, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($marge, null, null, null, null, $rounding)."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARK_RATES))
-				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 			print "</tr>\n";
 
 			$i++;
-			$cumul_achat += round($objp->buying_price, $rounding);
-			$cumul_vente += round($objp->selling_price, $rounding);
+			$cumul_achat += $objp->buying_price;
+			$cumul_vente += $objp->selling_price;
 		}
 
 	}
@@ -284,13 +283,13 @@ if ($result)
 	$totalMargin = $cumul_vente - $cumul_achat;
 	if ($totalMargin < 0)
 	{
-		$marginRate = ($cumul_achat != 0)?-1*(100 * round($totalMargin / $cumul_achat, 5)):'';
-		$markRate = ($cumul_vente != 0)?-1*(100 * round($totalMargin / $cumul_vente, 5)):'';
+		$marginRate = ($cumul_achat != 0)?-1*(100 * $totalMargin / $cumul_achat):'';
+		$markRate = ($cumul_vente != 0)?-1*(100 * $totalMargin / $cumul_vente):'';
 	}
 	else
 	{
-		$marginRate = ($cumul_achat != 0)?(100 * round($totalMargin / $cumul_achat, 5)):'';
-		$markRate = ($cumul_vente != 0)?(100 * round($totalMargin / $cumul_vente, 5)):'';
+		$marginRate = ($cumul_achat != 0)?(100 * $totalMargin / $cumul_achat):'';
+		$markRate = ($cumul_vente != 0)?(100 * $totalMargin / $cumul_vente):'';
 	}
 	print '<tr '.$bc[$var].' style="border-top: 1px solid #ccc; font-weight: bold">';
 	if ($id > 0)
@@ -298,13 +297,13 @@ if ($result)
 	else
 		print '<td>';
 	print $langs->trans('TotalMargin')."</td>";
-	print "<td align=\"right\">".price($cumul_vente)."</td>\n";
-	print "<td align=\"right\">".price($cumul_achat)."</td>\n";
-	print "<td align=\"right\">".price($totalMargin)."</td>\n";
+	print "<td align=\"right\">".price($cumul_vente, null, null, null, null, $rounding)."</td>\n";
+	print "<td align=\"right\">".price($cumul_achat, null, null, null, null, $rounding)."</td>\n";
+	print "<td align=\"right\">".price($totalMargin, null, null, null, null, $rounding)."</td>\n";
 	if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-		print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+		print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 	if (! empty($conf->global->DISPLAY_MARK_RATES))
-		print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+		print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 	print "</tr>\n";
 
 	print "</table>";
@@ -332,9 +331,9 @@ $(document).ready(function() {
      $("div.fiche form").submit();
   });
 
-  $("#totalMargin").html("<?php echo price($totalMargin); ?>");
-  $("#marginRate").html("<?php echo (($marginRate === '')?'n/a':price($marginRate)."%"); ?>");
-  $("#markRate").html("<?php echo (($markRate === '')?'n/a':price($markRate)."%"); ?>");
+  $("#totalMargin").html("<?php echo price($totalMargin, null, null, null, null, $rounding); ?>");
+  $("#marginRate").html("<?php echo (($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%"); ?>");
+  $("#markRate").html("<?php echo (($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%"); ?>");
 
 });
 </script>
diff --git a/htdocs/margin/tabs/productMargins.php b/htdocs/margin/tabs/productMargins.php
index 9b31514c7c91412730db324edb07d6302027f119..214cf72b86a8e106cde573169f9856ba0ddaf3eb 100644
--- a/htdocs/margin/tabs/productMargins.php
+++ b/htdocs/margin/tabs/productMargins.php
@@ -196,13 +196,13 @@ if ($id > 0 || ! empty($ref))
 
 					if ($objp->marge < 0)
 					{
-						$marginRate = ($objp->buying_price != 0)?-1*(100 * round($objp->marge / $objp->buying_price, 5)):'' ;
-						$markRate = ($objp->selling_price != 0)?-1*(100 * round($objp->marge / $objp->selling_price, 5)):'' ;
+						$marginRate = ($objp->buying_price != 0)?-1*(100 * $objp->marge / $objp->buying_price):'' ;
+						$markRate = ($objp->selling_price != 0)?-1*(100 * $objp->marge / $objp->selling_price):'' ;
 					}
 					else
 					{
-						$marginRate = ($objp->buying_price != 0)?(100 * round($objp->marge / $objp->buying_price, 5)):'' ;
-						$markRate = ($objp->selling_price != 0)?(100 * round($objp->marge / $objp->selling_price, 5)):'' ;
+						$marginRate = ($objp->buying_price != 0)?(100 * $objp->marge / $objp->buying_price):'' ;
+						$markRate = ($objp->selling_price != 0)?(100 * $objp->marge / $objp->selling_price):'' ;
 					}
 
 					print "<tr ".$bc[$var].">";
@@ -215,19 +215,19 @@ if ($id > 0 || ! empty($ref))
 					print "<td>".$objp->code_client."</td>\n";
 					print "<td align=\"center\">";
 					print dol_print_date($db->jdate($objp->datef),'day')."</td>";
-					print "<td align=\"right\">".price($objp->selling_price)."</td>\n";
-					print "<td align=\"right\">".price($objp->buying_price)."</td>\n";
-					print "<td align=\"right\">".price($objp->qty)."</td>\n";
-					print "<td align=\"right\">".price($objp->marge)."</td>\n";
+					print "<td align=\"right\">".price($objp->selling_price, null, null, null, null, $rounding)."</td>\n";
+					print "<td align=\"right\">".price($objp->buying_price, null, null, null, null, $rounding)."</td>\n";
+					print "<td align=\"right\">".price($objp->qty, null, null, null, null, $rounding)."</td>\n";
+					print "<td align=\"right\">".price($objp->marge, null, null, null, null, $rounding)."</td>\n";
 					if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-						print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+						print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 					if (! empty($conf->global->DISPLAY_MARK_RATES))
-						print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+						print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 					print '<td align="right">'.$invoicestatic->LibStatut($objp->paye,$objp->statut,5).'</td>';
 					print "</tr>\n";
 					$i++;
-					$cumul_achat += round($objp->buying_price, $rounding);
-					$cumul_vente += round($objp->selling_price, $rounding);
+					$cumul_achat += $objp->buying_price;
+					$cumul_vente += $objp->selling_price;
 					$cumul_qty += $objp->qty;
 				}
 			}
@@ -237,24 +237,24 @@ if ($id > 0 || ! empty($ref))
 			$totalMargin = $cumul_vente - $cumul_achat;
 			if ($totalMargin < 0)
 			{
-				$marginRate = ($cumul_achat != 0)?-1*(100 * round($totalMargin / $cumul_achat, 5)):'';
-				$markRate = ($cumul_vente != 0)?-1*(100 * round($totalMargin / $cumul_vente, 5)):'';
+				$marginRate = ($cumul_achat != 0)?-1*(100 * $totalMargin / $cumul_achat):'';
+				$markRate = ($cumul_vente != 0)?-1*(100 * $totalMargin / $cumul_vente):'';
 			}
 			else
 			{
-				$marginRate = ($cumul_achat != 0)?(100 * round($totalMargin / $cumul_achat, 5)):'';
-				$markRate = ($cumul_vente != 0)?(100 * round($totalMargin / $cumul_vente, 5)):'';
+				$marginRate = ($cumul_achat != 0)?(100 * $totalMargin / $cumul_achat):'';
+				$markRate = ($cumul_vente != 0)?(100 * $totalMargin / $cumul_vente):'';
 			}
 			print '<tr '.$bc[$var].' style="border-top: 1px solid #ccc; font-weight: bold">';
 			print '<td colspan=4>'.$langs->trans('TotalMargin')."</td>";
-			print "<td align=\"right\">".price($cumul_vente)."</td>\n";
-			print "<td align=\"right\">".price($cumul_achat)."</td>\n";
-			print "<td align=\"right\">".price($cumul_qty)."</td>\n";
-			print "<td align=\"right\">".price($totalMargin)."</td>\n";
+			print "<td align=\"right\">".price($cumul_vente, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($cumul_achat, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($cumul_qty, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($totalMargin, null, null, null, null, $rounding)."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARK_RATES))
-				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 			print '<td align="right">&nbsp;</td>';
 			print "</tr>\n";
 		}
@@ -278,8 +278,8 @@ $db->close();
 ?>
 <script type="text/javascript">
 $(document).ready(function() {
-	$("#totalMargin").html("<?php echo price($totalMargin); ?>");
-	$("#marginRate").html("<?php echo (($marginRate === '')?'n/a':price($marginRate)."%"); ?>");
-	$("#markRate").html("<?php echo (($markRate === '')?'n/a':price($markRate)."%"); ?>");
+	$("#totalMargin").html("<?php echo price($totalMargin, null, null, null, null, $rounding); ?>");
+	$("#marginRate").html("<?php echo (($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%"); ?>");
+	$("#markRate").html("<?php echo (($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%"); ?>");
 });
 </script>
diff --git a/htdocs/margin/tabs/thirdpartyMargins.php b/htdocs/margin/tabs/thirdpartyMargins.php
index aead7467f83a0fc80c107a4eaeabf60709d4038c..ad2dcbe98116746b51d4a6b640a6262c7ff44fa4 100644
--- a/htdocs/margin/tabs/thirdpartyMargins.php
+++ b/htdocs/margin/tabs/thirdpartyMargins.php
@@ -175,7 +175,7 @@ if ($socid > 0)
 
 			$cumul_achat = 0;
 			$cumul_vente = 0;
-			$cumul_qty = 0;
+			
 			$rounding = min($conf->global->MAIN_MAX_DECIMALS_UNIT,$conf->global->MAIN_MAX_DECIMALS_TOT);
 
 			if ($num > 0)
@@ -187,13 +187,13 @@ if ($socid > 0)
 
 					if ($objp->marge < 0)
 					{
-						$marginRate = ($objp->buying_price != 0)?-1*(100 * round($objp->marge / $objp->buying_price, 5)):'' ;
-						$markRate = ($objp->selling_price != 0)?-1*(100 * round($objp->marge / $objp->selling_price, 5)):'' ;
+						$marginRate = ($objp->buying_price != 0)?-1*(100 * $objp->marge / $objp->buying_price):'' ;
+						$markRate = ($objp->selling_price != 0)?-1*(100 * $objp->marge / $objp->selling_price):'' ;
 					}
 					else
 					{
-						$marginRate = ($objp->buying_price != 0)?(100 * round($objp->marge / $objp->buying_price, 5)):'' ;
-						$markRate = ($objp->selling_price != 0)?(100 * round($objp->marge / $objp->selling_price, 5)):'' ;
+						$marginRate = ($objp->buying_price != 0)?(100 * $objp->marge / $objp->buying_price):'' ;
+						$markRate = ($objp->selling_price != 0)?(100 * $objp->marge / $objp->selling_price):'' ;
 					}
 					
 					$var=!$var;
@@ -206,18 +206,18 @@ if ($socid > 0)
 					print "</td>\n";
 					print "<td align=\"center\">";
 					print dol_print_date($db->jdate($objp->datef),'day')."</td>";
-					print "<td align=\"right\">".price($objp->selling_price)."</td>\n";
-					print "<td align=\"right\">".price($objp->buying_price)."</td>\n";
-					print "<td align=\"right\">".price($objp->marge)."</td>\n";
+					print "<td align=\"right\">".price($objp->selling_price, null, null, null, null, $rounding)."</td>\n";
+					print "<td align=\"right\">".price($objp->buying_price, null, null, null, null, $rounding)."</td>\n";
+					print "<td align=\"right\">".price($objp->marge, null, null, null, null, $rounding)."</td>\n";
 					if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-						print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+						print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 					if (! empty($conf->global->DISPLAY_MARK_RATES))
-						print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+						print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 					print '<td align="right">'.$invoicestatic->LibStatut($objp->paye,$objp->statut,5).'</td>';
 					print "</tr>\n";
 					$i++;
-					$cumul_achat += round($objp->buying_price, $rounding);
-					$cumul_vente += round($objp->selling_price, $rounding);
+					$cumul_achat += $objp->buying_price;
+					$cumul_vente += $objp->selling_price;
 				}
 			}
 
@@ -226,23 +226,23 @@ if ($socid > 0)
 			$totalMargin = $cumul_vente - $cumul_achat;
 			if ($totalMargin < 0)
 			{
-				$marginRate = ($cumul_achat != 0)?-1*(100 * round($totalMargin / $cumul_achat, 5)):'';
-				$markRate = ($cumul_vente != 0)?-1*(100 * round($totalMargin / $cumul_vente, 5)):'';
+				$marginRate = ($cumul_achat != 0)?-1*(100 * $totalMargin / $cumul_achat):'';
+				$markRate = ($cumul_vente != 0)?-1*(100 * $totalMargin / $cumul_vente):'';
 			}
 			else
 			{
-				$marginRate = ($cumul_achat != 0)?(100 * round($totalMargin / $cumul_achat, 5)):'';
-				$markRate = ($cumul_vente != 0)?(100 * round($totalMargin / $cumul_vente, 5)):'';
+				$marginRate = ($cumul_achat != 0)?(100 * $totalMargin / $cumul_achat):'';
+				$markRate = ($cumul_vente != 0)?(100 * $totalMargin / $cumul_vente):'';
 			}
 			print '<tr '.$bc[$var].' style="border-top: 1px solid #ccc; font-weight: bold">';
 			print '<td colspan=2>'.$langs->trans('TotalMargin')."</td>";
-			print "<td align=\"right\">".price($cumul_vente)."</td>\n";
-			print "<td align=\"right\">".price($cumul_achat)."</td>\n";
-			print "<td align=\"right\">".price($totalMargin)."</td>\n";
+			print "<td align=\"right\">".price($cumul_vente, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($cumul_achat, null, null, null, null, $rounding)."</td>\n";
+			print "<td align=\"right\">".price($totalMargin, null, null, null, null, $rounding)."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARGIN_RATES))
-				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($marginRate === '')?'n/a':price($marginRate, null, null, null, null, $rounding)."%")."</td>\n";
 			if (! empty($conf->global->DISPLAY_MARK_RATES))
-				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate)."%")."</td>\n";
+				print "<td align=\"right\">".(($markRate === '')?'n/a':price($markRate, null, null, null, null, $rounding)."%")."</td>\n";
 			print '<td align="right">&nbsp;</td>';
 			print "</tr>\n";
 		}