Stop javascript automatically casting from decimal to string - javascript

I have the following piece of code:
if(netAnnualBilling == null){
netAnnualBilling = 0;
parseFloat(netAnnualBilling);
}
parseFloat(netAnnualBilling);
annualBillingCount = (annualBillingCount + netAnnualBilling);
parseFloat(annualBillingCount);
My two variables netAnnualBilling and annualBillingCount are both of type numbers. However, when I get to this line:
annualBillingCount = (annualBillingCount + netAnnualBilling);
javascript seems to turn annualBillingCount into type String and appends the two numbers together instead of adding or subtracting as its supposed to. Example:
annualBillingCount = 0;
netAnnualBilling = -1403.30
The result of the above code will show annualBillingCount to be equal to : 0-1403.80
I've tried ParseFloat every time these variables pop up but I'm not having any luck. What's going on?

If you want to make sure the variables are used as numbers, you can simply prepend the unary plus operator:
annualBillingCount = +annualBillingCount + +netAnnualBilling;
will force each operand to be treated as a number.
EDIT Heres a basic fiddle showing the addition of two strings with varying uses of the unary casting, using the code below:
var onetwo = "12";
var threefour = "34";
alert(onetwo + threefour); // string + string, so "12" + "34" = "1234"
alert(+onetwo + threefour); // number + string, so 12 + "34" = "12" + "34" = "1234"
alert(onetwo + +threefour); // string + number, second will be coerced back to string, so "12" + "34" = "1234"
alert(+onetwo + +threefour); // number + number, so 12 + 34 = 46

parseFloat() doesn't change the value, it returns the casted value. You need:
netAnnualBilling = parseFloat(netAnnualBilling)

Try this:
if(netAnnualBilling == null) {
netAnnualBilling = 0;
}
netAnnualBilling = parseFloat(netAnnualBilling);
annualBillingCount = parseFloat(annualBillingCount);
annualBillingCount += netAnnualBilling;

Related

Adding values in javascript [duplicate]

This question already has answers here:
Plus Arithmetic Operation
(7 answers)
Closed 8 years ago.
I am trying to add up the 2 values (bold) that are inputed by the user but instead of adding then mathematically (100+1 = 101) it adds them like this (100+1 = 1001).
$('#inputcost').keyup(function(){
var price = $(this).val();
});
function checkboxcost() {
var sum = 0;
var gn, elem;
for (i=0; i<2; i++) {
gn = 'extra'+i;
elem = document.getElementById(gn);
if (elem.checked == true) { sum += Number(elem.value); }
}
**var total = (price.value + sum.toFixed(2));
document.getElementById('totalcost').value = "$" + total;**
}
</script>
<input id="totalcost" disabled/>
The problem is, as you suspect, in this line:
var total = (price.value + sum.toFixed(2));
The problem is that .toFixed converts the number to a string for display. So you are trying to add a string to a number, which results in concatenation, not addition.
You want to add the numbers together, then display the sum:
var total = (price.value + sum).toFixed(2);
With that said, I'm not sure where price.value is coming from, so it's possible that's a string too. In which case, convert it with the unary plus + operator:
var total = (+price.value + sum).toFixed(2);
Its treating price.value as String so convert that string to number like:
var total = (Number(price.value) + sum.toFixed(2));
it seems string addition is taking place.
So try converting string numbers to integer using parseInt() like:
var x = parseInt("1")
var y = parseInt("2")
var z = x + y
Try parseInt(price.value) + ...
It's because the types of the operands are strings and the + operator for two strings does concatenation, not addition.
If you convert them to numbers then you'll get a number result:
"1" + "2" == "12"
parseFloat("1") + parseFloat("2") == 3

Javascript add count to a number with comma

So I have this
var str=document.getElementById('elem').innerHTML;
str=parseInt(str)+1;
<span id="elem">1,500</span>
and I can't get it to take the entire number and add one (+1) to the number without taking comma off. Can you suggest something?
Remove the commas by replacing them with an empty string, then you can parse the string.
Remember the second parameter in the parseInt method that specifies the base, so that it doesn't use base 8 for zero padded values.
var num = parseInt(str.replace(/,/g, ''), 10) + 1;
If you want to put the changed number back formatted with commas, you can use:
var s = num.toString();
for (var i = s.length - 3; i > 0; i -= 3) {
s = s.substr(0, i) + ',' + s.substr(i);
}
document.getElementById('elem').innerHTML = s;

Replace the last and first integers of a string

I have a string like this : var input = "/first_part/5/another_part/3/last_part"
I want to replace the last occurence of integers (3 in my string), then the first occurence (5).
I tried this: input .replace(/\d+/, 3); which replace all occurences. But how to only target the last / first one.
Thanks in advance.
This will replace the first and last single digit in the input string with 3
input.replace(/^(.*?)\d(.*)\d(.*)$/, "$13$23$3");
Here's a reFiddle link that demos this: http://refiddle.com/1am9
More readable:
var replacement = '3';
input.replace(/^(.*?)\d(.*)\d(.*)$/, "$1" + replacement + "$2" + replacement + "$3");
or input.replace(/^(.*?)\d(.*)\d(.*)$/, ["$1", "$2", "$3"].join(replacement)); if that's your thing.
You can use this negative lookahead based regex:
var input = "/first_part/5/another_part/3/last_part";
// replace first number
var r = input.replace(/\d+/, '9').replace(/\d+(?=\D*$)/, '7');
//=> /first_part/9/another_part/7/last_part
Here \d+(?=\D*$) means match 1 or more digits that are followed by all non-digits till end of line.
Here is a pretty rigid approach to your problem, you might want to adapt it to your needs, but it shows one way you can get things done.
// input string
var string = "/first_part/5/another_part/3/last_part";
//match all the parts of the string
var m = string.match(/^(\D+)(\d+)+(\D+)(\d+)(.+)/);
// ["/first_part/5/another_part/3/last_part", "/first_part/", "5", "/another_part/", "3", "/last_part"]
// single out your numbers
var n1 = parseInt(m[2], 10);
var n2 = parseInt(m[4], 10);
// do any operations you want on them
n1 *= 2;
n2 *= 2;
// put the string back together
var output = m[1] + n1 + m[3] + n2 + m[5];
// /first_part/10/another_part/6/last_part

how can i add a value from an array to a value from an another one in javascript?

So, I have two arrays: grade[] and grade2[] that contains elements I give from windows.prompt . I want to add a value from grade with a value from grade2 so i can calculate "media". But the code that i wrote just concats those two values, doesn't add them actually. I am a beginner and I hope you can help me. Thank you!
function display_student()
{
var n=window.prompt("Number of students: "+"");
var name= new Array(n);
var grade=new Array(n);
var grade2=new Array(n);
var y=0;
for (y=0; y<n; y++)
{
name[y]=window.prompt("Student name:","");
grade[y]=window.prompt("Grade 1: ","5");
grade2[y]=window.prompt("Grade 2: ","5")
document.write("</br>"+"Student name: "+name[y]+"</br>"+"Grade 1: "+grade[y]+" </br>"+"Grade 2: "+grade2[y]+"</br>");
var media=(grade[y]+grade2[y])/2;
document.write("Media: "+media+"</br>");
if(media<5)
document.write("Failed");
else
document.write("Promoted");
}
}
Use the parseInt function before adding.
var media=(parseInt(grade[y]) + parseInt(grade2[y]))/2;
Because they are strings and no numbers.
Take a look at parseInt(string, radix)
http://jibbering.com/faq/notes/type-conversion/
Use:
var media=(parseInt(grade[y], 10)+parseInt(grade2[y], 10))/2;
Assuming your grades are integers. Otherwise, use parseFloat (in that case, you won't need the second parameter).
Use parseFloat:
var media=(parseFloat(grade[y])+parseFloat(grade2[y]))/2;
The values in the array are of type String (as returned by the window.prompt function) you need to convert them to numbers to add them together :
function display_student() {
var n = window.prompt("Number of students: " + "");
var name = new Array(n);
var grade = new Array(n);
var grade2 = new Array(n);
var y = 0;
for (y = 0; y < n; y++) {
name[y] = window.prompt("Student name:", "");
grade[y] = window.prompt("Grade 1: ", "5");
grade2[y] = window.prompt("Grade 2: ", "5"); // added semi-colon here too
document.write("</br>" + "Student name: " + name[y] + "</br>" + "Grade 1: " + grade[y] + " </br>" + "Grade 2: " + grade2[y] + "</br>");
var media = (parseFloat(grade[y]) + parseFloat(grade2[y])) / 2;
document.write("Media: " + media + "</br>");
if (media < 5) {
document.write("Failed");
} else {
document.write("Promoted");
}
}
}
Working example : http://jsfiddle.net/z5cUw/
This is an indirect answer because this is tagged homework.
Because window.prompt returns a string by default, you need to convert this string to a number. There are several methods to do this.
You can use parseInt() as several people have suggested. Returns an integer value.
You can use parseFloat() as suggested.
You can force it using a simple number division on the prompt: window.prompt("Grade 1: ","5")/1; or during the media calculation: var media = (grade[y]/1 + grade2[y]/1) / 2;
You can use the Number() function: Number(window.prompt("Grade 1: ", "5"));
It is up to you to determine which is the appropriate method for your needs. What if the value entered is NOT a number? Study each of these methods to determine which best suites your needs.

Remove/ truncate leading zeros by javascript/jquery

Suggest solution for removing or truncating leading zeros from number(any string) by javascript,jquery.
You can use a regular expression that matches zeroes at the beginning of the string:
s = s.replace(/^0+/, '');
I would use the Number() function:
var str = "00001";
str = Number(str).toString();
>> "1"
Or I would multiply my string by 1
var str = "00000000002346301625363";
str = (str * 1).toString();
>> "2346301625363"
Maybe a little late, but I want to add my 2 cents.
if your string ALWAYS represents a number, with possible leading zeros, you can simply cast the string to a number by using the '+' operator.
e.g.
x= "00005";
alert(typeof x); //"string"
alert(x);// "00005"
x = +x ; //or x= +"00005"; //do NOT confuse with x+=x, which will only concatenate the value
alert(typeof x); //number , voila!
alert(x); // 5 (as number)
if your string doesn't represent a number and you only need to remove the 0's use the other solutions, but if you only need them as number, this is the shortest way.
and FYI you can do the opposite, force numbers to act as strings if you concatenate an empty string to them, like:
x = 5;
alert(typeof x); //number
x = x+"";
alert(typeof x); //string
hope it helps somebody
Since you said "any string", I'm assuming this is a string you want to handle, too.
"00012 34 0000432 0035"
So, regex is the way to go:
var trimmed = s.replace(/\b0+/g, "");
And this will prevent loss of a "000000" value.
var trimmed = s.replace(/\b(0(?!\b))+/g, "")
You can see a working example here
parseInt(value) or parseFloat(value)
This will work nicely.
I got this solution for truncating leading zeros(number or any string) in javascript:
<script language="JavaScript" type="text/javascript">
<!--
function trimNumber(s) {
while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
return s;
}
var s1 = '00123';
var s2 = '000assa';
var s3 = 'assa34300';
var s4 = 'ssa';
var s5 = '121212000';
alert(s1 + '=' + trimNumber(s1));
alert(s2 + '=' + trimNumber(s2));
alert(s3 + '=' + trimNumber(s3));
alert(s4 + '=' + trimNumber(s4));
alert(s5 + '=' + trimNumber(s5));
// end hiding contents -->
</script>
Simply try to multiply by one as following:
"00123" * 1; // Get as number
"00123" * 1 + ""; // Get as string
1. The most explicit is to use parseInt():
parseInt(number, 10)
2. Another way is to use the + unary operator:
+number
3. You can also go the regular expression route, like this:
number.replace(/^0+/, '')
Try this,
function ltrim(str, chars) {
chars = chars || "\\s";
return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
var str =ltrim("01545878","0");
More here
You should use the "radix" parameter of the "parseInt" function :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FparseInt
parseInt('015', 10) => 15
if you don't use it, some javascript engine might use it as an octal
parseInt('015') => 0
If number is int use
"" + parseInt(str)
If the number is float use
"" + parseFloat(str)
const number = '0000007457841';
console.log(+number) //7457841;
OR number.replace(/^0+/, '')
Regex solution from Guffa, but leaving at least one character
"123".replace(/^0*(.+)/, '$1'); // 123
"012".replace(/^0*(.+)/, '$1'); // 12
"000".replace(/^0*(.+)/, '$1'); // 0
I wanted to remove all leading zeros for every sequence of digits in a string and to return 0 if the digit value equals to zero.
And I ended up doing so:
str = str.replace(/(0{1,}\d+)/, "removeLeadingZeros('$1')")
function removeLeadingZeros(string) {
if (string.length == 1) return string
if (string == 0) return 0
string = string.replace(/^0{1,}/, '');
return string
}
One another way without regex:
function trimLeadingZerosSubstr(str) {
var xLastChr = str.length - 1, xChrIdx = 0;
while (str[xChrIdx] === "0" && xChrIdx < xLastChr) {
xChrIdx++;
}
return xChrIdx > 0 ? str.substr(xChrIdx) : str;
}
With short string it will be more faster than regex (jsperf)
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
Use "Math.abs"
eg: Math.abs(003) = 3;
console.log(Math.abs(003))

Categories

Resources