การแปลงสตริงให้ลอยใน C #


108

ฉันกำลังแปลงสตริงเช่น "41.00027357629127" และฉันกำลังใช้;

Convert.ToSingle("41.00027357629127");

หรือ

float.Parse("41.00027357629127");

วิธีการเหล่านี้กลับ4.10002732E + 15

เมื่อฉันแปลงเป็นลอยฉันต้องการ "41.00027357629127" สตริงนี้ควรจะเหมือนกัน ...


1
คุณรู้ได้อย่างไรว่ามันถูกแปลงเป็นอะไร - นั่นคือวิธีที่คุณแสดงตัวเลข
mmmmmm

1
มีความคิดว่าทำไม ToSingle? และไม่ ToFloat?
Lord Darth Vader

41.00027357629127 จะต้องไม่เป็น 4.10002732E + 15 ในสัญกรณ์ทางวิทยาศาสตร์เว้นแต่ว่าวัฒนธรรมของคุณจะใช้ลูกน้ำทศนิยมแทนจุดทศนิยม (และจุดเป็นตัวคั่นหลักพัน) ดังนั้นตัวเลขจะอ่านได้จริง: 4100027357629127 ดังนั้นจึงแสดงเป็น 4.10002732E + 15
ljgww

คำตอบ:


230

โลแคลของเธรดของคุณถูกตั้งค่าเป็นหนึ่งซึ่งมีเครื่องหมายทศนิยมคือ "," แทน ""

ลองใช้สิ่งนี้:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

อย่างไรก็ตามโปรดทราบว่าการลอยตัวไม่สามารถเก็บความแม่นยำจำนวนมากได้ คุณจะต้องใช้สองเท่าหรือทศนิยมจึงจะทำได้


35
อย่าลืมเพิ่มเนมสเปซusing System.Globalization;เพื่อเข้าถึงCultureInfo
Mobiletainment

24

ครั้งแรกก็เป็นเพียงการนำเสนอของfloatจำนวนที่คุณเห็นในการดีบัก จริงมูลค่าอยู่ที่ประมาณที่แน่นอน (มากที่สุดเท่าที่เป็นไปได้)

หมายเหตุ: ใช้ข้อมูลCultureInfo เสมอ เมื่อจัดการกับตัวเลขทศนิยมเทียบกับสตริง

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

นี่เป็นเพียงตัวอย่าง เลือกวัฒนธรรมที่เหมาะสมสำหรับกรณีของคุณ


ฉันจะเลือก CultureInfo ได้อย่างไร? ฉันอยู่ในตุรกีซึ่งฉันจะเพิ่ม TR-TR?
Mehmet

1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow



4

ความแม่นยำของการลอยคือ 7 หลัก หากคุณต้องการเก็บล็อตทั้งหมดคุณต้องใช้ประเภทคู่ที่เก็บ 15-16 หลัก เกี่ยวกับการจัดรูปแบบให้ดูที่โพสต์เกี่ยวกับการจัดรูปแบบคู่ผสม และคุณจำเป็นต้องกังวลเกี่ยวกับการแยกทศนิยมใน C #


ฉันเหนื่อยเป็นสองเท่าแยกมันกลับ 4100027357629127.0 มันแย่เกินไป
Mehmet

2
ดูเหมือนว่า "." อักขระไม่ใช่ตัวคั่นทศนิยมในภาษาของคุณ? ลองดูstackoverflow.com/questions/3870154/c-sharp-decimal-separator
jpe


-2

คุณสามารถใช้การแยกวิเคราะห์ด้วย double แทนการลอยเพื่อให้ได้ค่าที่แม่นยำยิ่งขึ้น

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