แปลงตัวแปรสตริง JavaScript เป็นทศนิยม / เงิน


114

เราจะแปลงตัวแปรสตริง JavaScript เป็นทศนิยมได้อย่างไร

มีฟังก์ชั่นเช่น:

parseInt(document.getElementById(amtid4).innerHTML)

คำตอบ:


240

ใช่ - parseFloat.

parseFloat(document.getElementById(amtid4).innerHTML);

สำหรับการจัดรูปแบบตัวเลขให้ใช้toFixed:

var num = parseFloat(document.getElementById(amtid4).innerHTML).toFixed(2);

num ตอนนี้เป็นสตริงที่มีรูปแบบตัวเลขด้วยทศนิยมสองตำแหน่ง


1
เราสามารถทำให้ตัวแปรนั้นมีทศนิยม 2 ตำแหน่งเช่น 120.50 ได้หรือไม่? ตอนนี้ฉันได้รับ 120.5 เท่านั้น
Varada

16
หากต้องการอ้างอิง @PhilipWhitehouse "โปรดสำหรับทุกคนที่อ่านข้อความนี้ในอนาคตอย่าใช้ float ในการจัดเก็บสกุลเงินคุณจะสูญเสียความแม่นยำและข้อมูลคุณควรจัดเก็บเป็นจำนวนเซ็นต์จำนวนเต็ม (หรือเพนนีเป็นต้น) แล้วจึงแปลงค่าก่อนหน้า เพื่อเอาท์พุท ". ที่มา: stackoverflow.com/questions/149055/…
SSH

@SSHThis เท่าที่ฉันทราบ JavaScript ไม่มีประเภทจำนวนเต็ม มีเฉพาะประเภท Number ซึ่งทั้งหมดจะถูกเก็บไว้ภายในเป็นตัวเลขทศนิยม 64 บิต คะแนนของคุณใช้ได้กับภาษาอื่น ๆ ที่มีประเภทจำนวนเต็มเช่น C #, C ++ แต่ใช้กับ JavaScript ไม่ได้จริงๆ
Simon Brangwin

1
@SimonBrangwin ประเด็นของเขายังใช้ได้ แต่ความหมายอาจทำให้สับสนได้ สิ่งที่เขาหมายถึงจริงๆคือ "เก็บเฉพาะสกุลเงินเป็นจำนวนเต็มในจาวาสคริปต์เท่านั้นเนื่องจากจะเก็บเป็นตัวเลขทศนิยม"
Josh Noe

1
แค่เตือนความจำ: parseFloat('22w')is 22and parseFloat('w22')isNaN
IG Pascual

65

คุณยังสามารถใช้คอนNumberสตรัคเตอร์ / ฟังก์ชัน (ไม่จำเป็นต้องใช้เรดิกซ์และใช้ได้ทั้งจำนวนเต็มและจำนวนลอย):

Number('09'); /=> 9
Number('09.0987'); /=> 9.0987

อีกทางเลือกหนึ่งเช่น Andy E กล่าวในความคิดเห็นที่คุณสามารถใช้+สำหรับการแปลง

+'09'; /=> 9
+'09.0987'; /=> 9.0987

IE11
Pants

@ กางเกงที่เกี่ยวกับExtensions to the Number built-in object ใน ES6ไม่เกี่ยวกับความสามารถในการใช้งานNumber
KooiInc


10
var formatter = new Intl.NumberFormat("ru", {
  style: "currency",
  currency: "GBP"
});

alert( formatter.format(1234.5) ); // 1 234,5 £

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat


ฉันไม่รู้ว่าสิ่งนี้มีอยู่จริง
protometa

คำตอบที่ดีที่สุดโดยไกล parseFloat? แม่นนรก? ไม่ขอบคุณ! Intl.NumberFormatเล็บมัน
Joshua Burns

2

มีความเสี่ยงพอสมควรที่จะใช้ฟังก์ชันจาวาสคริปต์เพื่อเปรียบเทียบและเล่นกับตัวเลข ใน javascript (0.1 + 0.2 == 0.3) จะส่งคืนเท็จเนื่องจากข้อผิดพลาดในการปัดเศษ ใช้ไลบรารี math.js


1

วิธีง่ายๆง่ายๆคือใช้ + x ซึ่งจะทำให้เครื่องหมายยังคงอยู่เช่นเดียวกับตัวเลขทศนิยม อีกทางเลือกหนึ่งคือการใช้ parseFloat (x) ความแตกต่างระหว่าง parseFloat (x) และ + x สำหรับสตริงว่าง + x ส่งกลับ 0 โดยที่ parseFloat (x) ส่งคืน NaN


1

ฉันสร้างฟังก์ชันผู้ช่วยเล็กน้อยเพื่อทำสิ่งนี้และตรวจจับข้อมูลที่ผิดรูปแบบทั้งหมด

function convertToPounds(str) { 
    var n = Number.parseFloat(str);
    if(!str || isNaN(n) || n < 0) return 0;
    return n.toFixed(2);
}

สาธิตอยู่ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.