[fix] division by zero

This commit is contained in:
Nabin Hait 2016-01-20 17:58:21 +05:30
parent 8594f7de0c
commit d0d44fa7c0
2 changed files with 32 additions and 12 deletions

View file

@ -218,7 +218,12 @@ function in_list(list, item) {
function remainder(numerator, denominator, precision) {
precision = cint(precision);
var multiplier = Math.pow(10, precision);
var _remainder = ((numerator * multiplier) % (denominator * multiplier)) / multiplier;
if (precision) {
var _remainder = ((numerator * multiplier) % (denominator * multiplier)) / multiplier;
} else {
var _remainder = numerator % denominator;
}
return flt(_remainder, precision);
};
@ -226,10 +231,15 @@ function round_based_on_smallest_currency_fraction(value, currency, precision) {
var smallest_currency_fraction_value = flt(frappe.model.get_value(":Currency",
currency, "smallest_currency_fraction_value"))
var remainder_val = remainder(value, smallest_currency_fraction_value, precision);
if(remainder_val > (smallest_currency_fraction_value / 2)) {
return value + (smallest_currency_fraction_value - remainder_val);
if(smallest_currency_fraction_value) {
var remainder_val = remainder(value, smallest_currency_fraction_value, precision);
if(remainder_val > (smallest_currency_fraction_value / 2)) {
value += (smallest_currency_fraction_value - remainder_val);
} else {
value -= remainder_val;
}
} else {
return value - remainder_val;
value = Math.round(value);
}
return value;
};

View file

@ -276,21 +276,31 @@ def rounded(num, precision=0):
return (num / multiplier) if precision else num
def remainder(numerator, denominator, precision):
def remainder(numerator, denominator, precision=2):
precision = cint(precision)
multiplier = 10 ** precision
_remainder = ((numerator * multiplier) % (denominator * multiplier)) / multiplier;
if precision:
_remainder = ((numerator * multiplier) % (denominator * multiplier)) / multiplier
else:
_remainder = numerator % denominator
return flt(_remainder, precision);
def round_based_on_smallest_currency_fraction(value, currency, precision):
def round_based_on_smallest_currency_fraction(value, currency, precision=2):
smallest_currency_fraction_value = flt(frappe.db.get_value("Currency",
currency, "smallest_currency_fraction_value"))
remainder_val = remainder(value, smallest_currency_fraction_value, precision)
if remainder_val > (smallest_currency_fraction_value / 2):
return value + (smallest_currency_fraction_value - remainder_val)
if smallest_currency_fraction_value:
remainder_val = remainder(value, smallest_currency_fraction_value, precision)
if remainder_val > (smallest_currency_fraction_value / 2):
value += smallest_currency_fraction_value - remainder_val
else:
value -= remainder_val
else:
return value - remainder_val
value = rounded(value)
return flt(value, precision)
def encode(obj, encoding="utf-8"):
if isinstance(obj, list):