Rounding in totals calculation
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index c2e76e2..e21ff74 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -210,14 +210,15 @@
 	calculate_totals: function() {
 		var tax_count = this.frm.tax_doclist.length;
 		this.frm.doc.grand_total = flt(tax_count ?
-			this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total,
-			precision("grand_total"));
-		this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total /
-			this.frm.doc.conversion_rate, precision("grand_total_import"));
+			this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total);
+		this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate);
 
 		this.frm.doc.total_tax = flt(this.frm.doc.grand_total - this.frm.doc.net_total,
 			precision("total_tax"));
 
+		this.frm.doc.grand_total = flt(this.frm.doc.grand_total, precision("grand_total"));
+		this.frm.doc.grand_total_import = flt(this.frm.doc.grand_total_import, precision("grand_total_import"));
+
 		// rounded totals
 		if(frappe.meta.get_docfield(this.frm.doc.doctype, "rounded_total", this.frm.doc.name)) {
 			this.frm.doc.rounded_total = Math.round(this.frm.doc.grand_total);
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index fc912c9..1e6e65d 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -110,13 +110,13 @@
 		self.round_floats_in(self, ["net_total", "net_total_import"])
 
 	def calculate_totals(self):
-		self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist
-			else self.net_total, self.precision("grand_total"))
-		self.grand_total_import = flt(self.grand_total / self.conversion_rate,
-			self.precision("grand_total_import"))
+		self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist else self.net_total)
+		self.grand_total_import = flt(self.grand_total / self.conversion_rate)
 
-		self.total_tax = flt(self.grand_total - self.net_total,
-			self.precision("total_tax"))
+		self.total_tax = flt(self.grand_total - self.net_total, self.precision("total_tax"))
+
+		self.grand_total = flt(self.grand_total, self.precision("grand_total"))
+		self.grand_total_import = flt(self.grand_total_import, self.precision("grand_total_import"))
 
 		if self.meta.get_field("rounded_total"):
 			self.rounded_total = rounded(self.grand_total)
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 86d8837..6e93c30 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -216,17 +216,17 @@
 		self.round_floats_in(self, ["net_total", "net_total_export"])
 
 	def calculate_totals(self):
-		self.grand_total = flt(self.tax_doclist and \
-			self.tax_doclist[-1].total or self.net_total, self.precision("grand_total"))
-		self.grand_total_export = flt(self.grand_total / self.conversion_rate,
-			self.precision("grand_total_export"))
+		self.grand_total = flt(self.tax_doclist[-1].total if self.tax_doclist else self.net_total)
 
-		self.other_charges_total = flt(self.grand_total - self.net_total,
-			self.precision("other_charges_total"))
+		self.grand_total_export = flt(self.grand_total / self.conversion_rate)
 
-		self.other_charges_total_export = flt(self.grand_total_export -
-			self.net_total_export + flt(self.discount_amount),
-			self.precision("other_charges_total_export"))
+		self.other_charges_total = flt(self.grand_total - self.net_total, self.precision("other_charges_total"))
+
+		self.other_charges_total_export = flt(self.grand_total_export - self.net_total_export +
+			flt(self.discount_amount), self.precision("other_charges_total_export"))
+
+		self.grand_total = flt(self.grand_total, self.precision("grand_total"))
+		self.grand_total_export = flt(self.grand_total_export, self.precision("grand_total_export"))
 
 		self.rounded_total = rounded(self.grand_total)
 		self.rounded_total_export = rounded(self.grand_total_export)
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index fd16258..783474c 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -341,11 +341,8 @@
 		var me = this;
 		var tax_count = this.frm.tax_doclist.length;
 
-		this.frm.doc.grand_total = flt(
-			tax_count ? this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total,
-			precision("grand_total"));
-		this.frm.doc.grand_total_export = flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate,
-			precision("grand_total_export"));
+		this.frm.doc.grand_total = flt(tax_count ? this.frm.tax_doclist[tax_count - 1].total : this.frm.doc.net_total);
+		this.frm.doc.grand_total_export = flt(this.frm.doc.grand_total / this.frm.doc.conversion_rate);
 
 		this.frm.doc.other_charges_total = flt(this.frm.doc.grand_total - this.frm.doc.net_total,
 			precision("other_charges_total"));
@@ -353,6 +350,9 @@
 			this.frm.doc.net_total_export + flt(this.frm.doc.discount_amount),
 			precision("other_charges_total_export"));
 
+		this.frm.doc.grand_total = flt(this.frm.doc.grand_total, precision("grand_total"));
+		this.frm.doc.grand_total_export = flt(this.frm.doc.grand_total_export, precision("grand_total_export"));
+
 		this.frm.doc.rounded_total = Math.round(this.frm.doc.grand_total);
 		this.frm.doc.rounded_total_export = Math.round(this.frm.doc.grand_total_export);
 	},