มีฟังก์ชั่นคณิตศาสตร์ใน JavaScript ที่แปลงตัวเลขเป็นค่าบวกหรือไม่
มีฟังก์ชั่นคณิตศาสตร์ใน JavaScript ที่แปลงตัวเลขเป็นค่าบวกหรือไม่
คำตอบ:
var x = -100; ~x+1 === 100 ทำให้เป็นบวกเสมอในขณะที่การเสริมนั้นเพียงแค่พลิกกลับสัญญาณ var x = 100; ~x+1 === -100Math.abs
เกี่ยวกับx *= -1อะไร ฉันชอบความเรียบง่าย
xจะถูกพลิก ถ้าx = 23และผลักลงในสมการนั้นแล้วจะเท่ากับx -23ในคำพูดของ Mr. Escalante "เวลาบวกที่ลบเท่ากับลบลบคูณลบเป็นลบบวก" ... "ฉันจะไปถึง kiiiiiiids เหล่านี้ได้อย่างไร!"
x=23มันจะกลายเป็น -23 เมื่อคำถามเกิดขึ้น 'แปลงจำนวนลบให้เป็นจำนวนบวกใน JS' แต่ข้างบนจะพลิกตัวเลขใด ๆ ไม่ว่าจะเป็นบวกหรือลบ
xเป็นบวกเสมอ คำขอโทษของฉัน @ myusuf
Math.abs(x)หรือถ้าคุณเป็นบางอย่างx = -xคุ้มค่าเป็นลบก่อนการแปลงเพียงย่อหน้าเครื่องหมายลบปกติ:
เครื่องหมายลบ (-) สามารถแปลงจำนวนบวกเป็นจำนวนลบและจำนวนลบเป็นจำนวนบวก เป็นน้ำตาลภาพสำหรับx=-yx=(y*-1)
var y = -100;
var x =- y;
unsigned_value = Math.abs(signed_value);
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ...
ฉันพบโซลูชันนี้เข้าใจง่าย
หากคุณต้องการเขียนโค้ดที่น่าสนใจที่ไม่มีใครสามารถอัปเดตได้ให้ลองทำดังนี้:
~ --x
~ดำเนินการแปลงตัวเลขเป็นจำนวนเต็ม 32 บิต หากคุณมีการลอยเป็นอินพุทก็จะถูก hosed
ฉันรู้ว่ามันช้าไปหน่อย แต่สำหรับคนที่ดิ้นรนกับสิ่งนี้คุณสามารถใช้ฟังก์ชั่นต่อไปนี้:
เปลี่ยนจำนวนเป็นบวก
let x = 54;
let y = -54;
let resultx = Math.abs(x); // 54
let resulty = Math.abs(y); // 54เปลี่ยนจำนวนลบใด ๆ
let x = 54;
let y = -54;
let resultx = -Math.abs(x); // -54
let resulty = -Math.abs(y); // -54สลับหมายเลขใด ๆ
let x = 54;
let y = -54;
let resultx = -(x); // -54
let resulty = -(y); // 54เป็นลบ
var X = -10 ;
var number = Math.abs(X); //result 10
บวกถึงลบ
var X = 10 ;
var number = (X)*(-1); //result -10
การคูณด้วย (-1) เป็นวิธีที่เร็วที่สุดในการแปลงจำนวนลบให้เป็นบวก แต่คุณต้องระวังอย่าแปลงความผิดพลาดของฉันให้เป็นจำนวนบวกเป็นลบ! จำเป็นต้องมีการตรวจสอบเพิ่มเติม ...
จากนั้น Math.abs, Math.floor และ parseInt จะช้าที่สุด
https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1
ฉันทำอะไรแบบนี้เอง
num<0?num*=-1:'';
มันจะตรวจสอบว่าจำนวนเป็นลบและถ้ามันเป็นคูณด้วย -1 นี้จะคืนค่ามันขึ้นอยู่กับคุณถ้าคุณจับมัน ในกรณีที่คุณต้องการมอบหมายให้คุณควรทำสิ่งต่อไปนี้
var out = num<0?num*=-1:num; //I think someone already mentioned this variant.
แต่มันขึ้นอยู่กับว่าเป้าหมายของคุณคืออะไร สำหรับฉันมันง่ายทำในเชิงบวกถ้าเป็นลบไม่ทำอะไรเลย ดังนั้น '' ในรหัส ในกรณีนี้ฉันใช้โอเปอเรเตอร์ระดับอุดมศึกษาเพราะฉันต้องการมันเป็นอย่างดี:
if(num<0)num*=-1;
ฉันเห็นวิธีแก้ปัญหาระดับบิตที่นี่และต้องการแสดงความคิดเห็นในที่นี้เช่นกัน
~--num; //Drawback for this is that num original value will be reduced by 1
soultion นี้แฟนซีมากในความคิดของฉันเราสามารถเขียนมันเช่นนี้:
~(num = num-1);
ในแง่ง่ายเราเอาจำนวนลบออกไปหนึ่งอันจากนั้นก็กลับด้านหน่อย ถ้าเรากลับด้าน bitwise โดยปกติแล้วเราจะได้ค่า 1 น้อยเกินไป คุณยังสามารถทำสิ่งนี้:
~num+1; //Wont change the actual num value, merely returns the new value
นั่นจะทำแบบเดียวกัน แต่จะกลับด้านก่อนแล้วบวก 1 กับจำนวนบวก แม้ว่าคุณจะไม่ทำเช่นนี้:
~num++; //Wont display the right value.
ที่จะไม่ทำงานสาเหตุของการมีความสำคัญผู้ประกอบการ postfix เช่นnum++จะได้รับการประเมินก่อน ~ และเหตุผลคำนำหน้า++numจะไม่ทำงานแม้ว่ามันจะมีความสำคัญเช่นเดียวกับ bitwise NOT (~) เป็นสาเหตุที่มีการประเมินจากขวาไปซ้าย ฉันพยายามที่จะสลับมันรอบ ๆ แต่ดูเหมือนว่าคำนำหน้านั้นค่อนข้างดีเมื่อเทียบกับ bitwise NOT +1 จะทำงานได้เนื่องจาก '+' มีลำดับความสำคัญสูงกว่าและจะถูกประเมินในภายหลัง
ฉันพบว่าวิธีการแก้ปัญหาค่อนข้างสนุกและตัดสินใจที่จะขยายตัวเนื่องจากมันเพิ่งถูกส่งไปที่นั่นและโพสต์คนดูว่าอาจไม่สนใจ แม้ว่าใช่มันจะไม่ทำงานกับการลอยตัว
ความหวังของฉันอยู่ที่โพสต์นี้ไม่ได้ย้ายไปจากคำถามเดิม : /
วิธีการน้อยที่สุดของฉัน
สำหรับการแปลงจำนวนลบให้เป็นค่าบวก & ในทางกลับกัน
var num = -24;
num -= num*2;
console.log(num)
// result = 24
คุณสามารถใช้โอเปอเรเตอร์~ที่แปลงตัวเลขเป็นลบและเพิ่ม 1 เป็นลบได้ในเชิงตรรกะ:
var x = 3;
x = (~x + 1);
console.log(x)
// result = -3
ฉันรู้วิธีอื่นที่จะทำ เทคนิคนี้ทำงานในเชิงลบเป็นบวก & รองในทางกลับกัน
var x = -24;
var result = x * -1;
ในทางกลับกัน:
var x = 58;
var result = x * -1;
รหัสสด:
// NEGATIVE TO POSITIVE: ******************************************
var x = -24;
var result = x * -1;
console.log(result);
// VICE VERSA: ****************************************************
var x = 58;
var result = x * -1;
console.log(result);
// FLOATING POINTS: ***********************************************
var x = 42.8;
var result = x * -1;
console.log(result);
// FLOATING POINTS VICE VERSA: ************************************
var x = -76.8;
var result = x * -1;
console.log(result);
สำหรับการเขียนโปรแกรมการทำงาน Ramda มีวิธีที่ดีสำหรับเรื่องนี้ วิธีการเดียวกันนี้เริ่มจากบวกไปยังลบและกลับกัน
ถ้าคุณต้องการให้จำนวนเป็นบวกเสมอไม่ว่าคุณจะทำอะไร
function toPositive(n){
if(n < 0){
n = n * -1;
}
return n;
}
var a = toPositive(2); // 2
var b = toPositive(-2); // 2
คุณสามารถลองสิ่งนี้ได้ แต่ฉันไม่แนะนำ:
function makePositive(n){
return Number((n*-n).toString().replace('-',''));
}
var a = makePositive(2); // 2
var b = makePositive(-2); // 2
ปัญหานี้คือคุณสามารถเปลี่ยนจำนวนเป็นลบจากนั้นแปลงเป็นสตริงและลบ-จากสตริงจากนั้นแปลงกลับเป็น int ซึ่งฉันคิดว่าจะใช้เวลาประมวลผลมากขึ้นแล้วเพียงแค่ใช้ฟังก์ชั่นอื่น ๆ
ฉันทดสอบมันด้วย PHP และฟังก์ชั่นแรกนั้นเร็วกว่า แต่บางครั้ง JS ทำสิ่งที่บ้าคลั่งดังนั้นฉันจึงไม่สามารถพูดได้อย่างแน่นอน
n*-n n*-1ฉันจะลบตัวอย่างโดยสิ้นเชิงเนื่องจากการแปลงประเภทและการเรียกใช้เมธอดไม่มีประสิทธิภาพมากเมื่อเทียบกับความเรียบง่ายของตัวอย่างแรก แม้แต่การเล่นโวหารของ JS ก็ไม่สามารถช่วยได้ที่นี่