Score:0

วิธีทำให้ฟิลด์ทศนิยมยอมรับค่าทศนิยม

ธง us

ฉันใช้ Drupal 7 และมีฟิลด์โฟลต ใช้สำหรับป้อนราคา

ราคาส่วนใหญ่ที่ฉันป้อนมีทศนิยม (เช่น 101.82, 99.88) ราคาบางส่วนเป็นค่าลบ (เช่น -55.52, -1009.88)

บางครั้งเมื่อฉันป้อนค่าทศนิยม Drupal จะลบค่าทศนิยมออก (เช่น 101.82 จะกลายเป็น 101.00) ในบางครั้งมันจะเก็บค่าทศนิยม

ดูเหมือนจะไม่มีสัมผัสหรือเหตุผลว่าทำไมจึงเก็บค่าทศนิยมสำหรับบางฟิลด์และละเว้นสำหรับฟิลด์อื่น

ฉันจะมั่นใจได้อย่างไรว่ามันเก็บค่าทศนิยมไว้เสมอ?

cn flag
ฟังดูเหมือน: https://www.drupal.org/forum/support/post-installation/2011-05-19/float-field-gets-rounded-to-one-decimal-point-on-save
big_smile avatar
us flag
@RyanHartman ขอบคุณ! วิธีแก้ปัญหาที่ให้ไว้สำหรับ Durpal 8 คุณรู้หรือไม่ว่าฉันจะแปลมันสำหรับ Durpal 7 ได้อย่างไร ขอบคุณล่วงหน้า!
Score:1
ธง cn

ค่าทศนิยมของคุณทำงานอย่างถูกต้อง สิ่งสำคัญคือต้องเข้าใจว่าเมื่อใดควรใช้ทศนิยมและเมื่อใดควรใช้ฟิลด์ประเภททศนิยม ในสถานการณ์ของคุณ การใช้เขตข้อมูลทศนิยมน่าจะเป็นทางออกที่ดีที่สุด. ลองดูหน้าวิกิสองหน้านี้ซึ่งแจกแจงวิธีการใช้หน้าเหล่านี้ใน Drupal

ลอย

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

ทศนิยม (ตัวเลข)

ช่วยให้คุณระบุความแม่นยำและมาตราส่วนของตัวเลขได้...ใช้ประเภทข้อมูลแบบทศนิยมเพื่อเก็บค่าตัวเลขที่แน่นอน โดยที่เราไม่ต้องการให้มีการปัดเศษใดๆ ออก แต่จะใช้ค่าที่แน่นอนและแม่นยำ

วิธีแปลงฟิลด์

เพื่อให้บรรลุเป้าหมายนี้ คุณจะต้องสร้างโมดูลง่ายๆ และเปิดใช้งานใน Drupal เริ่มต้นโดย ทำตามขั้นตอนที่ 1-4 ของหน้า Drupal wiki นี้. หลังจากทำเสร็จแล้ว ให้ทำตามขั้นตอนเหล่านี้:

  1. คัดลอกไฟล์ ****.module ใหม่ที่คุณสร้างในขั้นตอนที่ 3-4 และเปลี่ยนนามสกุลเป็น ****.install ดังนั้นตอนนี้คุณจึงมีไฟล์สองไฟล์ โดยทั้งสองไฟล์มีเพียง <?php ที่จุดเริ่มต้น
  2. ภายในไฟล์ ****.install คุณต้อง เพิ่มฟังก์ชันการอัพเดทที่ Drupal สามารถเรียกใช้ได้.
  3. เมื่อคุณมีฟังก์ชันนั้นแล้ว คุณจะวางโค้ดจาก คำตอบนี้ ข้างใน.
  4. คุณจะต้องปรับตัวแปรในสคริปต์ให้ตรงกับการกำหนดค่าของคุณ เช่น; $ฟิลด์, ความแม่นยำ, มาตราส่วน, ไม่เป็นโมฆะ.
  5. สำรองฐานข้อมูลของคุณ และพร้อมที่จะเปลี่ยนกลับเป็นข้อมูลสำรองหากเกิดข้อผิดพลาด
  6. เปิดใช้งานโมดูลใหม่ ซึ่งฉันแนะนำให้คุณทำจากบรรทัดคำสั่งผ่าน drush และ your_module_name.

ถ้าเว็บไซต์ของคุณไม่ใหญ่เกินไป คุณก็เลี่ยงได้ แต่ถ้ามันใหญ่ คุณจะต้องสำรวจตัวเลือกของคุณ เพราะในที่สุด PHP จะหมดเวลา

big_smile avatar
us flag
ใน Drupal 7 มีการแปลงฟิลด์ทศนิยมเป็นฟิลด์ทศนิยมหรือไม่? ฉันมีค่าหลายร้อยค่าในฟิลด์ทศนิยมแล้ว (ฉันรู้ว่าบางค่าอาจไม่ถูกต้อง แต่ฉันก็ต้องอยู่กับมัน) ขอบคุณ!
cn flag
@big_smile ใช้ https://drupal.stackexchange.com/a/151367/20866 และแก้ไขสคริปต์เพื่อตั้งค่า "ความแม่นยำ" และ "มาตราส่วน" ที่ถูกต้อง
cn flag
@big_smile ขออภัย! ฉันได้แก้ไขคำตอบสองสามครั้งเมื่อฉันรู้ว่าโซลูชันแรกของฉันจะไม่จัดการทุกสิ่งที่คุณต้องการ
big_smile avatar
us flag
ขอบคุณสำหรับความช่วยเหลือของคุณ! ฉันถือว่าฉันไปที่ PHPmyadmin > ชื่อฐานข้อมูล > SQL จากนั้นใส่รหัสในหน้าต่างแบบสอบถามและกด "ไป" ถูกต้องหรือไม่? ฉันได้รับข้อผิดพลาดนี้: `พบข้อผิดพลาด 3 รายการระหว่างการวิเคราะห์ ตัวละครที่ไม่คาดคิด (ใกล้กับ "$" ที่ตำแหน่ง 0) การเริ่มต้นของคำสั่งที่ไม่คาดคิด (ใกล้กับ "$" ที่ตำแหน่ง 0) ประเภทคำสั่งที่ไม่รู้จัก (ใกล้กับ "สนาม" ที่ตำแหน่ง 1) แบบสอบถาม SQL: $field = 'field_transaction_amount' #1064 - คุณมีข้อผิดพลาด ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณสำหรับไวยากรณ์ที่ถูกต้องเพื่อใช้ใกล้กับ '$field = 'field_transaction_amount'' ที่บรรทัด 1`
cn flag
@big_smile ฉันอัปเดตคำตอบพร้อมรายละเอียดเพิ่มเติมเกี่ยวกับสคริปต์
big_smile avatar
us flag
ขอบคุณมาก! `คุณจะต้องปรับตัวแปรในสคริปต์ให้ตรงกับการกำหนดค่าของคุณ เช่น; $field, precision, scale, not null.` ราคา (เช่น 28.53 หรือ -15.99) ตาม artilces ที่คุณเชื่อมโยง `precision` และ `scale` จะเป็น `2` ไม่เป็น null ` เป็น `ไม่เป็นโมฆะ` ถูกต้องหรือไม่?
cn flag
@big_smile ความแม่นยำคือตัวเลขทั้งหมด สเกลคือจำนวนหลังทศนิยม สเกลของคุณควรตั้งค่าเป็น 2 และปล่อยให้ความแม่นยำอยู่ที่ 10 ด้วยความแม่นยำที่ 10 คุณสามารถมี 8 หลักก่อนทศนิยม ดังนั้นค่าสูงสุด/ต่ำสุดจะเป็น +/-99,999,999.99 ตามลำดับ เกี่ยวกับ "ไม่เป็นโมฆะ" ฉันเชื่อว่าคุณจะตั้งค่าเป็น TRUE หากฟิลด์ของคุณจำเป็น ฉันคิดว่า
big_smile avatar
us flag
ฉันทำตามขั้นตอนอย่างถูกต้อง แต่ดูเหมือนจะไม่ทำงาน ชื่อเครื่องของฟิลด์ของฉันคือ field_transaction_amount ดังนั้นสำหรับสคริปต์ ฉันป้อน `$field = 'field_transaction_amount';` อย่างไรก็ตามก็ยังคงเป็นฟิลด์โฟลตทั้งใน Drupal UI และ phpmyadmin ฉันยังเรียกใช้ Drush CC All และไปที่ mysite.com/update แต่ไม่ได้ทำอะไรเลย (หน้าอัปเดตไม่มีการอัปเดตเลยด้วยซ้ำ) ความคิดใด ๆ ? ขอบคุณสำหรับความช่วยเหลืออย่างต่อเนื่องของคุณ!
cn flag
คุณเปิดใช้งานโมดูลก่อนที่จะเพิ่มฟังก์ชัน `hook_update_7000()` หรือไม่ คุณสามารถสร้างฟังก์ชัน `hook_update_7001` ใหม่ในไฟล์การติดตั้งของคุณ และ drupal จะตรวจพบว่ามีสิ่งใหม่ให้เรียกใช้ คุณมักจะพบรายละเอียดที่จำเป็นเพื่อให้การอัปเดตเริ่มทำงานภายใต้ลิงก์ใน #2 ในคำตอบ
Score:0
ธง us

คำตอบของ Ryan Hartman ใช้งานได้ดีที่สุด อย่างไรก็ตาม นี่เป็นอีกทางเลือกหนึ่งในกรณีที่คำตอบนั้นใช้ไม่ได้

  1. สำรองฐานข้อมูลของคุณ
  2. ส่งออกฐานข้อมูลของคุณจาก phpmyadmin ก่อนส่งออก คุณอาจต้องการจัดเรียงตารางตามขนาด แล้วล้างตารางแคชทั้งหมดหากตารางนั้นใหญ่เกินไป คุณยังสามารถล้าง search_index
  3. เปิดซอฟต์แวร์ในแอปพลิเคชันที่สามารถอ่านไฟล์ฐานข้อมูลขนาดใหญ่ เช่น BBedit Sublime ดูเหมือนจะไม่รองรับขนาด
  4. ค้นหา ânumber_floatâ (ตรวจดูว่า grep ปิดอยู่)
  5. คุณจะพบผลลัพธ์ดังนี้â¨(23, 'field_nameâ, 'number_float', 'number', 1, 'field_sql_storage', 'field_sql_storage', â¦.)
  6. แทนที่ 'number_float' สักหน่อยด้วย 'number_decimal',
  7. ทำซ้ำขั้นตอนที่ 3-5 สำหรับทุกกรณีของ ânumber_float.
  8. ตอนนี้ค้นหา âลอยâ
  9. คุณจะพบรายการหลายบรรทัดที่ขึ้นต้นด้วย:â¨สร้างตาราง field_data_field_name( â¨ในหลายบรรทัด พวกเขาจะมีบรรทัดดังนี้: ⨠field_name ลอย DEFAULT NULL
  10. แทนที่คำว่า float ด้วย âทศนิยม (10,2)â.
  11. ทำซ้ำขั้นตอนที่ 8 ถึง 10 สำหรับทุกกรณีของ âลอย. อย่างไรก็ตาม เมื่อทำการค้นหา คุณจะพบกับรายการที่ไม่ได้อ้างอิงถึงฟิลด์ เช่น search_index และ รวมการค้นหา. อย่าเปลี่ยนแปลงสิ่งเหล่านี้
  12. บันทึกไฟล์และนำเข้าสู่ Phpmyadmin ตรวจสอบใน Drupal เพื่อดูว่าทุกอย่างเรียบร้อยดีหรือไม่

เคล็ดลับ: ก่อนส่งออกในขั้นตอนที่ 2 ให้ไปที่ Drupal และสร้างฟิลด์จำลองที่ใช้ทศนิยม (ตั้งชื่อให้ค้นหาง่ายเช่น อ่าาาา). กรอกข้อมูลด้วยรายการจำลองภายใน Drupalจากนั้นเมื่อคุณส่งออกฐานข้อมูลของคุณ คุณสามารถศึกษาวิธีที่ Drupal จัดการกับช่องทศนิยม ดังนั้นคุณจะรู้วิธีที่ดีที่สุดในการเปลี่ยนช่องทศนิยมในฐานข้อมูล

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา