I have a form with a RadNumeric Textbox on it and here are the following results…
34.5 = 35 (rounding away from zero)
34.6 = 35 (rounding away from zero)
**** -34.5 = -34 (rounding closer to zero) ****
-34.6 = -35 (rounding away from zero)
The question I have, is why does .5 round closer to zero when it is a negative number? Is there a way to achieve the expected results…
34.5 = 35 (rounding away from zero)
34.6 = 35 (rounding away from zero)
**** -34.5 = -35 (rounding away from zero) ****
-34.6 = -35 (rounding away from zero)
Thanks,
Steve
5 Answers, 1 is accepted
The described behavior will be observed if you set AllowRounding="false" and DecimalDigits="0". Please set AllowRounding="true" (or remove the property) and -34.5 will be transformed to -35 upon blur.
Regards,
Dimo
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
The AllowRounding is set to “true” and the DecimalDigits is “0” and -34.5 is rounding to -34 not -35.
The results that I am getting above in the first post are happening with the following values…
AllowRounding = true
CultureNativeDecimalSeparator = “.”
DecimalDigits = 0
DecimalSeparator = “.”
GroupSeparator = “,”
GroupSizes = 3
KeepNotRoundedValue = true
NegativePattern = “-n”
PositivePattern = “n”
Are there any other ideas on what to do or should I create a ticket?
Thanks,
Steve
I am not able to reproduce the problem with the specified list of properties and values. The RadNumericTextBox rounds -34.5 to -35.
Please send a runnable demo.
Kind regards,
Dimo
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
Thank you for the runnable demo. I tested with a couple of versions and actually we have fixed the issue for Q2 2009 SP1 (2009.2.826). Please upgrade.
An alternative option is to include or register the following Javascript in the <body> of the web page, so that it overrides the method from the embedded resource script file. You can remove it after upgrading in the future.
if (typeof(Telerik) != "undefined" && typeof(Telerik.Web.UI.NumberFormat) != "undefined"){ Telerik.Web.UI.NumberFormat.Round = function(number, config) { if (!config.get_numberFormat().AllowRounding) { var decDig = config.get_numberFormat().DecimalDigits; if (decDig == 0 && number.toString().indexOf('.') != -1) { return number.toString().substr(0, number.toString().indexOf('.') + 1); } else if (decDig > 0 && number.toString().indexOf('.') != -1) { var parts = number.toString().split('.'); if (parts[1].length > decDig) { return parseFloat(parts[0] + '.' + parts[1].substr(0, decDig)); } else { return number; } } else { return number; } } //Very large and very small numbers are converted to scientific notation //in textual representation, therefore we degrade to the less precise //method of rounding if (number.toString().indexOf('e') > -1) { var pow = Math.pow(10, config.get_numberFormat().DecimalDigits); return Math.round(number * pow) / pow; } else if (number.toString().indexOf('.') > -1) { var parts = number.toString().split('.'); var integralPart = Math.abs(parseInt(parts[0])); //extract the integral part var decimalPart = parseFloat("0." + parts[1]); //extract the decimal part var decimalPartLength = parts[1].length; var sign = parts[0].charAt(0) == '-' ? -1 : 1; //save the sign //Return the number itself, if its decimal digits count is equal to //the DecimalDigits setting in the NumberFormat if (parts[1].length == config.get_numberFormat().DecimalDigits) { return number; } //raise the decimal part to power of 10 needed to make it integer var temp = decimalPart * Math.pow(10, decimalPartLength); //delete by 10 and round until we leave with the specified //number of decimal digits for (var i = 1; i <= decimalPartLength; i++) { if (i <= decimalPartLength - config.get_numberFormat().DecimalDigits) { temp = Math.round(temp / 10); } else { temp /= 10; } } /* Handles cases when the decimal part if of the form: 0.00546 and we want to round to 3 decimal digits. At this point, temp would be 0.546 and we still need to divide twice by ten to get 0.005. The following IF statement handles cases when the decimal needs to be adjusted in such way */ if (temp.toString().indexOf('.') > -1) { var fracLengthAfterRounding = temp.toString().split('.')[1].length; if (fracLengthAfterRounding > config.get_numberFormat().DecimalDigits) { var pow = Math.pow(10, config.get_numberFormat().DecimalDigits); temp = Math.round(temp * pow) / pow; } } var preliminaryResult = sign * (integralPart + temp); if (config.get_numberFormat().DecimalDigits > 0 && preliminaryResult.toString().indexOf(".") != -1 && preliminaryResult.toString().split(".")[1].length > config.get_numberFormat().DecimalDigits) { return sign * (parseFloat(integralPart + "." + temp.toString().substr(2))); } else { return preliminaryResult; } } else { return number; } }}Kind regards,
Dimo
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
