Discount amount loss adjustment if no taxes or discount applied on net total
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index dc3f943..9637f39 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -229,7 +229,7 @@
 
 					# adjust Discount Amount loss in last tax iteration
 					if i == (len(self.doc.get("taxes")) - 1) and self.discount_amount_applied \
-						and self.doc.apply_discount_on == "Grand Total":
+						and self.doc.discount_amount:
 							self.adjust_discount_amount_loss(tax)
 
 	def get_current_tax_amount(self, item, tax, item_tax_map):
@@ -326,14 +326,28 @@
 				self.doc.precision("base_discount_amount"))
 
 			total_for_discount_amount = self.get_total_for_discount_amount()
+			taxes = self.doc.get("taxes")
+			net_total = 0
 
 			if total_for_discount_amount:
 				# calculate item amount after Discount Amount
-				for item in self.doc.get("items"):
-					distributed_amount = flt(self.doc.discount_amount) * item.net_amount / total_for_discount_amount
+				for i, item in enumerate(self.doc.get("items")):
+					distributed_amount = flt(self.doc.discount_amount) * \
+						item.net_amount / total_for_discount_amount
+											
 					item.net_amount = flt(item.net_amount - distributed_amount, item.precision("net_amount"))
+					net_total += item.net_amount
+					
+					# discount amount rounding loss adjustment if no taxes
+					if (not taxes or self.doc.apply_discount_on == "Net Total") \
+						and i == len(self.doc.get("items")) - 1:
+							discount_amount_loss = flt(self.doc.total - net_total - self.doc.discount_amount, 
+								self.doc.precision("net_total"))
+							item.net_amount = flt(item.net_amount + discount_amount_loss, 
+								item.precision("net_amount"))
+					
 					item.net_rate = flt(item.net_amount / item.qty, item.precision("net_rate"))
-
+					
 					self._set_in_company_currency(item, ["net_rate", "net_amount"])
 
 				self.discount_amount_applied = True