Điểm:0

Làm cách nào để trường float chấp nhận giá trị thập phân?

lá cờ us

Tôi đang sử dụng Drupal 7 và có trường float. Nó được sử dụng để nhập giá.

Hầu hết giá tôi nhập đều có số thập phân (ví dụ: 101,82, 99,88). Một số giá là giá trị âm (ví dụ: -55,52, -1009,88).

Đôi khi khi tôi nhập giá trị thập phân, Drupal sẽ xóa giá trị thập phân. (Ví dụ: 101,82 sẽ trở thành 101,00). Những lần khác, nó sẽ giữ giá trị thập phân.

Dường như không có bất kỳ vần điệu hay lý do nào giải thích tại sao nó giữ các giá trị thập phân cho một số trường và bỏ qua nó cho các trường khác.

Làm cách nào để đảm bảo rằng nó luôn giữ giá trị thập phân?

lá cờ cn
Âm thanh như thế này: https://www.drupal.org/forum/support/post-installation/2011-05-19/float-field-gets-rounded-to-one-decimal-point-on-save
big_smile avatar
lá cờ us
@RyanHartman Cảm ơn! Giải pháp đưa ra ở đó dường như là dành cho Durpal 8. Bạn có biết làm thế nào tôi có thể dịch nó cho Durpal 7 không? Cảm ơn trước!
Điểm:1
lá cờ cn

Giá trị float của bạn đang hoạt động chính xác. Điều quan trọng là phải hiểu khi nào sử dụng số float và khi nào sử dụng trường loại thập phân. Trong tình huống của bạn, sử dụng trường thập phân dường như là giải pháp tốt nhất. Kiểm tra hai trang wiki này chia nhỏ cách bạn sẽ sử dụng chúng trong Drupal.

Trôi nổi

Điểm nổi là thứ khiến nhiều người nhầm lẫn. Các số dấu phẩy động về cơ bản là các số được lưu trữ trong ký hiệu khoa học, gần giống như thứ mà chúng ta đã học trong lớp toán ở trường... Số float và Double được sử dụng để lưu trữ các giá trị ước tính. Những con số họ lưu trữ chỉ có thể chính xác đến một độ chính xác nhất định.

Thập phân (Số)

Nó cho phép bạn chỉ định độ chính xác và tỷ lệ của một số...sử dụng loại dữ liệu DECIMAL để lưu trữ các giá trị số chính xác, nơi chúng tôi không muốn bất kỳ làm tròn số nào, nhưng các giá trị chính xác và chính xác.

Cách chuyển đổi trường

Để thực hiện điều này, bạn cần tạo một mô-đun đơn giản và kích hoạt nó trong Drupal. bắt đầu bằng làm theo các bước 1-4 của trang wiki Drupal này. Sau khi hoàn thành, hãy làm theo các bước sau:

  1. Sao chép tệp ****.module mới mà bạn đã tạo ở bước 3-4 và thay đổi phần mở rộng thành ****.install để bây giờ bạn có hai tệp, cả hai chỉ với <?php lúc bắt đầu.
  2. Bên trong tệp ****.install, bạn cần thêm một chức năng cập nhật mà Drupal có thể chạy.
  3. Khi bạn có chức năng đó, bạn sẽ đặt mã từ câu trả lời này phía trong.
  4. Bạn sẽ muốn điều chỉnh các biến trong tập lệnh để phù hợp với cấu hình của mình, tức là; trường $, độ chính xác, tỉ lệ, có giá trị.
  5. Sao lưu cơ sở dữ liệu của bạn và sẵn sàng hoàn nguyên về bản sao lưu nếu xảy ra sự cố.
  6. Kích hoạt mô-đun mới mà tôi khuyên bạn nên thực hiện từ dòng lệnh thông qua drush vi your_module_name.

Nếu trang web của bạn không quá lớn, bạn có thể bỏ qua điều này, nhưng nếu trang web lớn, bạn sẽ phải khám phá các tùy chọn của mình vì cuối cùng PHP sẽ hết thời gian chờ.

big_smile avatar
lá cờ us
Trong Drupal 7, có cách nào để chuyển đổi trường float thành trường thập phân không? Tôi đã có hàng trăm giá trị trong trường float (tôi biết một số trong số này sẽ không đúng, nhưng tôi sẽ phải sống với điều đó). Cảm ơn!
lá cờ cn
@big_smile sử dụng https://drupal.stackexchange.com/a/151367/20866 và chỉnh sửa tập lệnh để đặt `độ chính xác` và `tỷ lệ` chính xác.
lá cờ cn
@big_smile Xin lỗi! Tôi đã chỉnh sửa câu trả lời của mình một vài lần khi tôi nhận ra giải pháp đầu tiên của mình sẽ không xử lý mọi thứ bạn cần.
big_smile avatar
lá cờ us
Cảm ơn bạn đã giúp đỡ! Tôi giả sử tôi truy cập PHPmyadmin > Tên cơ sở dữ liệu > SQL. Sau đó đặt mã vào cửa sổ truy vấn và nhấn "Đi". Đúng không? Tôi gặp lỗi này: `3 lỗi đã được tìm thấy trong quá trình phân tích. Nhân vật bất ngờ. (gần "$" ở vị trí 0) Sự khởi đầu bất ngờ của tuyên bố. (gần "$" ở vị trí 0) Loại tuyên bố không được công nhận. (gần "trường" ở vị trí 1) Truy vấn SQL: $field = 'field_transaction_amount' #1064 - Bạn có lỗi; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần '$field = 'field_transaction_amount'' ở dòng 1`
lá cờ cn
@big_smile Tôi đã cập nhật câu trả lời với nhiều chi tiết hơn về tập lệnh.
big_smile avatar
lá cờ us
Cảm ơn bạn rất nhiều! `Bạn sẽ muốn điều chỉnh các biến trong tập lệnh để phù hợp với cấu hình của mình, tức là; $field, precision, scale, not null.` Dựa trên các tác phẩm bạn đã liên kết đến, đối với giá (ví dụ: 28,53 hoặc -15,99), `precision` và `scale` sẽ là `2` và tôi sẽ để `không phải null ` là `không null`. Đúng không?
lá cờ cn
@big_smile Độ chính xác là tổng các chữ số, tỷ lệ là bao nhiêu sau dấu thập phân. Tỷ lệ của bạn phải được đặt thành 2 và bạn có thể để độ chính xác là 10. Với độ chính xác là 10, bạn có thể có 8 chữ số trước dấu thập phân để các giá trị tối đa/tối thiểu tương ứng là +/-99.999.999,99. Liên quan đến `not null`, tôi tin rằng bạn sẽ đặt nó thành TRUE nếu trường của bạn được yêu cầu, tôi nghĩ vậy.
big_smile avatar
lá cờ us
Tôi đã làm theo các bước chính xác, nhưng nó dường như không hoạt động. Tên máy của trường của tôi là field_transaction_amount, vì vậy đối với tập lệnh tôi đã nhập `$field = 'field_transaction_amount';`. Tuy nhiên, nó vẫn là một trường float cả trong Drupal UI và phpmyadmin. Tôi cũng đã chạy Drush CC All và truy cập mysite.com/update, nhưng không làm được gì cả (trang cập nhật thậm chí không có bất kỳ bản cập nhật nào). Bất kỳ ý tưởng? Cảm ơn tất cả sự giúp đỡ tiếp tục của bạn!
lá cờ cn
Bạn đã bật mô-đun trước khi thêm chức năng `hook_update_7000()` chưa? Bạn có thể tạo một hàm `hook_update_7001` mới trong tệp cài đặt của mình và drupal sẽ phát hiện ra rằng có thứ gì đó mới để chạy. Rất có thể bạn sẽ tìm thấy thông tin chi tiết cần thiết để kích hoạt bản cập nhật theo liên kết ở mục #2 trong câu trả lời.
Điểm:0
lá cờ us

Câu trả lời của Ryan Hartman là tốt nhất để sử dụng. Tuy nhiên, đây là một giải pháp thay thế trong trường hợp câu trả lời đó không hiệu quả.

  1. Tạo bản sao lưu cơ sở dữ liệu của bạn.
  2. Xuất cơ sở dữ liệu của bạn từ phpmyadmin. Trước khi xuất, bạn có thể muốn sắp xếp các bảng theo kích thước rồi làm trống tất cả các bảng trong bộ nhớ đệm nếu chúng quá lớn. Bạn cũng có thể để trống search_index.
  3. Mở phần mềm trong một ứng dụng có thể đọc các tệp cơ sở dữ liệu lớn như BBedit. Sublime dường như không phù hợp với kích thước.
  4. Tìm kiếm âsố_floatâ (đảm bảo grep đã tắt)
  5. Bạn sẽ tìm thấy kết quả như sau:â¨(23, 'field_nameâ, 'number_float', 'number', 1, 'field_sql_storage', 'field_sql_storage', â¦.)
  6. Thay thế cái 'số_float' chút với 'số_thập_phân',
  7. Lặp lại các bước 3-5 cho tất cả các phiên bản của âsố_floatâ.
  8. Bây giờ hãy tìm kiếm âtrôi nổiâ
  9. Bạn sẽ tìm thấy các mục nhiều dòng bắt đầu bằng:â¨TẠO BẢNG field_data_field_name( â¨Trong nhiều dòng sẽ có 1 dòng như sau: ⨠field_name float MẶC ĐỊNH NULL
  10. Thay thế từ nổi bằng âthập phân(10,2)â.
  11. Lặp lại các bước từ 8 đến 10 cho tất cả các phiên bản của âtrôi nổiâ. Tuy nhiên, khi tìm kiếm, bạn sẽ bắt gặp các mục nhập không tham chiếu đến các trường, chẳng hạn như search_indextổng tìm kiếm. Đừng thay đổi những điều này.
  12. Lưu tệp và nhập vào Phpmyadmin. Kiểm tra Drupal để xem tất cả có ổn không.

Mẹo: Trước khi xuất ở bước 2, hãy truy cập Drupal và tạo một trường giả sử dụng số thập phân. (Đặt cho nó một cái tên dễ tìm chẳng hạn như aaaaa). Điền vào đó một số mục nhập giả trong Drupal.Sau đó, khi bạn xuất cơ sở dữ liệu của mình, bạn có thể nghiên cứu cách Drupal xử lý các trường thập phân, nhờ đó bạn sẽ biết cách tốt nhất để thay đổi các trường float trong cơ sở dữ liệu.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.