ฉันพยายามแยกค่าสองค่าจากดาตาแกรม ฟิลด์เป็นตัวเลขและเมื่อมีเครื่องหมายจุลภาค (เช่น 554,20) ฉันจะไม่สามารถรับตัวเลขหลังเครื่องหมายจุลภาค ฉันได้พยายามและparseInt
parseFloat
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันพยายามแยกค่าสองค่าจากดาตาแกรม ฟิลด์เป็นตัวเลขและเมื่อมีเครื่องหมายจุลภาค (เช่น 554,20) ฉันจะไม่สามารถรับตัวเลขหลังเครื่องหมายจุลภาค ฉันได้พยายามและparseInt
parseFloat
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
หากพวกเขาตั้งใจที่จะแยกค่าลองนี้:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
หากพวกเขาตั้งใจที่จะเป็นค่าเดียว (เช่นในภาษาฝรั่งเศสที่ครึ่งหนึ่งเขียน 0,5)
var value = parseFloat("554,20".replace(",", "."));
+(string)
แทนได้parseString(string)
ตามที่ @Stev ด้านล่างแนะนำ v1 = +(values[0]); v2 = +(values[1]);
ดังนั้นตัวอย่างแรกจะเป็น
6.000.000
สิ่งที่ถ้าจำนวนของฉันคือ ฟังก์ชันแทนที่เฉพาะแทนที่เครื่องหมายจุลภาคแรก
คุณเคยลองทำเช่นนี้หรือไม่? : p
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (สตริง) จะส่งสตริงลงในโฟลต
ที่มีประโยชน์!
ดังนั้นเพื่อแก้ปัญหาของคุณคุณสามารถทำสิ่งนี้:
var floatValue = +(str.replace(/,/,'.'));
+(str)
วิธีแก้ปัญหามาก - parseFloat
ละเว้นอักขระที่ไม่ถูกต้องหลังตัวเลข+(str)
กลับมาNaN
ในกรณีเหล่านั้นซึ่งเป็นสิ่งที่ฉันต้องการ
แทนที่เครื่องหมายจุลภาคด้วยจุด
สิ่งนี้จะคืน 554 เท่านั้น:
var value = parseFloat("554,20")
สิ่งนี้จะส่งคืน 554.20:
var value = parseFloat("554.20")
ดังนั้นในที่สุดคุณสามารถใช้:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
อย่าลืมว่าparseInt()
ควรใช้เพื่อแยกเลขจำนวนเต็มเท่านั้น (ไม่มีคะแนนแบบลอย) ในกรณีของคุณมันจะคืนค่า 554 เท่านั้นนอกจากนี้การเรียก parseInt () บนโฟลตจะไม่ปัดเศษตัวเลข: มันจะใช้พื้นของมัน
ตัวอย่างเพิ่มเติมเพื่อตอบคำถามของ Pedro Ferreira จากความคิดเห็น:
หากฟิลด์ข้อความมีจุดคั่นหลายพันจุดเช่นเดียวกับในจุด1.234.567,99
เหล่านั้นอาจถูกกำจัดไปก่อนด้วยจุดอื่นreplace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
หากคุณขยายวัตถุ String เช่นนี้ ..
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
.. คุณสามารถเรียกใช้เช่นนี้
"554,20".float()
> 554.20
ทำงานร่วมกับจุดเช่นกัน
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool หรือใครก็ตามที่พยายามจะเข้ามาแทนที่มากกว่าหนึ่งพันคั่นวิธีหนึ่งที่จะทำมันเป็น regex /foo/g
โลกแทนที่: เพียงจำไว้ว่า.
มันเป็นเมทาเฟกต์ดังนั้นคุณต้องหลบหนีหรือใส่ไว้ในวงเล็บ ( \.
หรือ[.]
) นี่คือตัวเลือกหนึ่ง:
var str = '6.000.000';
str.replace(/[.]/g,",");
คุณสามารถใช้ฟังก์ชั่นนี้ มันจะแทนที่เครื่องหมายจุลภาคด้วย '' และจากนั้นมันจะแยกวิเคราะห์ค่าและหลังจากนั้นจะปรับเครื่องหมายจุลภาคเป็นค่าอีกครั้ง
function convertToFloat(val) {
if (val != '') {
if (val.indexOf(',') !== -1)
val.replace(',', '');
val = parseFloat(val);
while (/(\d+)(\d{3})/.test(val.toString())) {
val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
}
}
return val;
}
ฉันมีปัญหาเดียวกันยกเว้นฉันไม่ทราบล่วงหน้าว่าตัวคั่นหลักพันและตัวแยกทศนิยมคืออะไร ฉันลงเอยด้วยการเขียนห้องสมุดเพื่อทำสิ่งนี้ หากคุณสนใจที่นี่ก็คือ: https://github.com/GuillaumeLeclerc/number-parsing
ลอง
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});