เหตุใดจึง0.ToString("#.##")
ส่งคืนสตริงว่าง มันควรจะเป็น0.00
หรืออย่างน้อย 0 ?
เหตุใดจึง0.ToString("#.##")
ส่งคืนสตริงว่าง มันควรจะเป็น0.00
หรืออย่างน้อย 0 ?
คำตอบ:
#
ในรูปแบบสตริงระบุว่าค่าเป็นทางเลือก หากคุณต้องการได้ผลลัพธ์0.00
คุณต้องการสิ่งต่อไปนี้:
0.ToString("0.00");
ดูที่นี่สำหรับรูปแบบตัวเลขที่กำหนดเองที่สามารถส่งผ่านไปยังวิธีนี้
เนื่องจากในสตริงรูปแบบ#
จะใช้เพื่อแสดงถึงตัวยึดอักขระที่เป็นทางเลือก ใช้เฉพาะในกรณีที่จำเป็นเพื่อแสดงจำนวนเท่านั้น
หากคุณทำสิ่งนี้แทนคุณ0.ToString("0.##");
จะได้รับ:0
น่าสนใจถ้าคุณทำสิ่งนี้0.ToString("#.0#");
คุณจะได้รับ:.0
หากคุณต้องการทั้งสามหลัก: 0.ToString("0.00");
สร้าง:0.00
จากความคิดเห็นต่อคำตอบนี้ข้อโต้แย้งของคุณน่าจะเป็น
มันควรจะแสดงเป็น "0" เพราะเหตุใดทุกคนจึงต้องการเห็นสตริงว่างถ้าค่าตัวเลขเป็น 0
คำตอบนั้นง่ายมาก: คุณมีทางเลือกว่าต้องการให้แสดงผลอย่างไร นั่นคือสิ่งที่สตริงรูปแบบที่กำหนดเองมีไว้สำหรับ คุณได้เลือกเพียงสตริงรูปแบบไม่ถูกต้องสำหรับความต้องการของคุณ
ตามเอกสารที่เกี่ยวกับหลักยึดตำแหน่ง
หากค่าที่จัดรูปแบบมีตัวเลขอยู่ในตำแหน่งที่ '#' ปรากฏในสตริงรูปแบบตัวเลขนั้นจะถูกคัดลอกไปยังสตริงผลลัพธ์ มิฉะนั้นจะไม่มีอะไรถูกเก็บไว้ในตำแหน่งนั้นในสตริงผลลัพธ์ ตัวระบุนี้จะไม่แสดงอักขระ "0" หากไม่ใช่ตัวเลขที่มีนัยสำคัญแม้ว่า "0" จะเป็นตัวเลขหลักเดียวในสตริงก็ตาม มันจะแสดงอักขระ '0' หากเป็นตัวเลขที่มีนัยสำคัญในตัวเลขที่แสดง สตริงรูปแบบ "##" ทำให้ค่าถูกปัดเศษเป็นตัวเลขที่ใกล้เคียงที่สุดก่อนหน้าทศนิยมซึ่งจะใช้การปัดเศษจากศูนย์เสมอ ตัวอย่างเช่นการจัดรูปแบบ 34.5 ด้วย "##" จะทำให้ได้ค่า 35
หากคุณต้องการให้ศูนย์แสดงให้ใช้Zero PlaceHolder
f ค่าที่กำลังจัดรูปแบบมีตัวเลขอยู่ในตำแหน่งที่ '0' ปรากฏในสตริงรูปแบบจากนั้นตัวเลขนั้นจะถูกคัดลอกไปยังสตริงผลลัพธ์ ตำแหน่งของซ้ายสุด '0' ก่อนจุดทศนิยมและขวาสุด '0' หลังจุดทศนิยมจะกำหนดช่วงของตัวเลขที่แสดงอยู่ในสตริงผลลัพธ์เสมอ
ตัวระบุ "00" ทำให้ค่าถูกปัดเศษเป็นตัวเลขที่ใกล้เคียงที่สุดก่อนหน้าทศนิยมซึ่งจะใช้การปัดเศษจากศูนย์เสมอ ตัวอย่างเช่นการจัดรูปแบบ 34.5 ด้วย "00" จะทำให้ได้ค่า 35
ลองทำตามนี้ 0.ToString("#,##; #,##;0")
ส่วนแรกใช้กับค่าบวกส่วนที่สองใช้กับค่าลบและส่วนที่สามใช้กับค่าศูนย์
ใช้แบบนี้:
0.ToString("#0.##")
0
after #
จะตรวจสอบให้แน่ใจว่าได้ตั้งค่าเอาต์พุตเป็น 0 หากค่าเป็น 0 มิฉะนั้นจะแสดงค่า ดังนั้น0.0.ToString("#0.##")=0.00
และ10.ToString("#.##")=10.00