ทำไม 0 ToString (“ #. ##”) ส่งคืนสตริงว่างแทนที่จะเป็น 0.00 หรืออย่างน้อย 0


114

เหตุใดจึง0.ToString("#.##")ส่งคืนสตริงว่าง มันควรจะเป็น0.00หรืออย่างน้อย 0 ?

คำตอบ:


185

#ในรูปแบบสตริงระบุว่าค่าเป็นทางเลือก หากคุณต้องการได้ผลลัพธ์0.00คุณต้องการสิ่งต่อไปนี้:

0.ToString("0.00");

ดูที่นี่สำหรับรูปแบบตัวเลขที่กำหนดเองที่สามารถส่งผ่านไปยังวิธีนี้


3
สิ่งหนึ่งที่ฉันยังสับสนอยู่ว่าทำไมผลลัพธ์ถึงไม่เป็น 0 เพราะ 0 ไม่ใช่ทางเลือก ว่างเปล่ามีเหตุผลไหม?
user960567

135

เนื่องจากในสตริงรูปแบบ#จะใช้เพื่อแสดงถึงตัวยึดอักขระที่เป็นทางเลือก ใช้เฉพาะในกรณีที่จำเป็นเพื่อแสดงจำนวนเท่านั้น

หากคุณทำสิ่งนี้แทนคุณ0.ToString("0.##");จะได้รับ:0

น่าสนใจถ้าคุณทำสิ่งนี้0.ToString("#.0#");คุณจะได้รับ:.0

หากคุณต้องการทั้งสามหลัก: 0.ToString("0.00");สร้าง:0.00


จากความคิดเห็นต่อคำตอบนี้ข้อโต้แย้งของคุณน่าจะเป็น

มันควรจะแสดงเป็น "0" เพราะเหตุใดทุกคนจึงต้องการเห็นสตริงว่างถ้าค่าตัวเลขเป็น 0

คำตอบนั้นง่ายมาก: คุณมีทางเลือกว่าต้องการให้แสดงผลอย่างไร นั่นคือสิ่งที่สตริงรูปแบบที่กำหนดเองมีไว้สำหรับ คุณได้เลือกเพียงสตริงรูปแบบไม่ถูกต้องสำหรับความต้องการของคุณ


20

ตามเอกสารที่เกี่ยวกับหลักยึดตำแหน่ง

หากค่าที่จัดรูปแบบมีตัวเลขอยู่ในตำแหน่งที่ '#' ปรากฏในสตริงรูปแบบตัวเลขนั้นจะถูกคัดลอกไปยังสตริงผลลัพธ์ มิฉะนั้นจะไม่มีอะไรถูกเก็บไว้ในตำแหน่งนั้นในสตริงผลลัพธ์ ตัวระบุนี้จะไม่แสดงอักขระ "0" หากไม่ใช่ตัวเลขที่มีนัยสำคัญแม้ว่า "0" จะเป็นตัวเลขหลักเดียวในสตริงก็ตาม มันจะแสดงอักขระ '0' หากเป็นตัวเลขที่มีนัยสำคัญในตัวเลขที่แสดง สตริงรูปแบบ "##" ทำให้ค่าถูกปัดเศษเป็นตัวเลขที่ใกล้เคียงที่สุดก่อนหน้าทศนิยมซึ่งจะใช้การปัดเศษจากศูนย์เสมอ ตัวอย่างเช่นการจัดรูปแบบ 34.5 ด้วย "##" จะทำให้ได้ค่า 35

หากคุณต้องการให้ศูนย์แสดงให้ใช้Zero PlaceHolder

f ค่าที่กำลังจัดรูปแบบมีตัวเลขอยู่ในตำแหน่งที่ '0' ปรากฏในสตริงรูปแบบจากนั้นตัวเลขนั้นจะถูกคัดลอกไปยังสตริงผลลัพธ์ ตำแหน่งของซ้ายสุด '0' ก่อนจุดทศนิยมและขวาสุด '0' หลังจุดทศนิยมจะกำหนดช่วงของตัวเลขที่แสดงอยู่ในสตริงผลลัพธ์เสมอ
ตัวระบุ "00" ทำให้ค่าถูกปัดเศษเป็นตัวเลขที่ใกล้เคียงที่สุดก่อนหน้าทศนิยมซึ่งจะใช้การปัดเศษจากศูนย์เสมอ ตัวอย่างเช่นการจัดรูปแบบ 34.5 ด้วย "00" จะทำให้ได้ค่า 35



-1

ใช้แบบนี้:

0.ToString("#0.##")

0after #จะตรวจสอบให้แน่ใจว่าได้ตั้งค่าเอาต์พุตเป็น 0 หากค่าเป็น 0 มิฉะนั้นจะแสดงค่า ดังนั้น0.0.ToString("#0.##")=0.00และ10.ToString("#.##")=10.00

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