Puncte:0

Cum se face ca câmpul flotant să accepte valori zecimale?

drapel us

Folosesc Drupal 7 și am un câmp flotant. Este folosit pentru introducerea prețurilor.

Majoritatea prețurilor pe care le introduc au zecimale (de exemplu, 101,82, 99,88). Unele dintre prețuri sunt valori negative (de exemplu, -55,52, -1009,88).

Uneori, când introduc o valoare zecimală, Drupal va elimina valoarea zecimală. (De exemplu, 101.82 va deveni 101.00). Alteori, va păstra valoarea zecimală.

Nu pare să existe vreo rimă sau motiv pentru care păstrează valorile zecimale pentru unele câmpuri și le omite pentru alte câmpuri.

Cum mă pot asigura că păstrează întotdeauna valoarea zecimală?

drapel cn
Sună așa: https://www.drupal.org/forum/support/post-installation/2011-05-19/float-field-gets-rounded-to-one-decimal-point-on-save
big_smile avatar
drapel us
@RyanHartman Mulțumesc! Soluția dată acolo pare să fie pentru Durpal 8. Știți cum o pot traduce pentru Durpal 7? Mulțumesc anticipat!
Puncte:1
drapel cn

Valorile dvs. flotante funcționează corect. Este important să înțelegeți când să folosiți un float și când să utilizați un câmp de tip zecimal. In situatia ta, utilizarea unui câmp zecimal pare a fi cea mai bună soluție. Consultați aceste două pagini wiki care descriu modul în care le-ați folosi în Drupal.

Pluti

virgulă mobilă este ceva care derutează o mulțime de oameni. Numerele cu virgulă mobilă sunt în esență numere stocate în notație științifică, aproape același lucru pe care l-am învățat la ora de matematică de la școală... Flotante și duble sunt folosite pentru a stoca valori estimate. Numerele pe care le stochează pot fi exacte doar cu o anumită precizie.

Decimală (numerică)

Vă permite să specificați precizia și scara unui număr... utilizați tipul de date DECIMAL pentru a stoca valori numerice exacte, unde nu vrem nicio rotunjire, ci valori exacte și precise.

Cum se transformă câmpul

Pentru a realiza acest lucru, va trebui să creați un modul simplu și să-l activați în Drupal. Începe prin urmând pașii 1-4 din această pagină wiki Drupal. După ce ați terminat, urmați acești pași:

  1. Copiați noul fișier ****.module pe care l-ați creat la pașii 3-4 și schimbați extensia la ****.install, astfel încât acum să aveți două fișiere, ambele doar cu <?php la inceput.
  2. În interiorul fișierului ****.install, trebuie adăugați o funcție de actualizare pe care Drupal o poate rula.
  3. Odată ce aveți această funcție, ați plasa codul de la acest raspuns interior.
  4. Veți dori să ajustați variabilele din script pentru a se potrivi cu configurația dvs., de exemplu; $câmp, precizie, scară, nu nul.
  5. Faceți o copie de rezervă a bazei de date și fiți gata să reveniți la backup dacă lucrurile merg prost.
  6. Activați noul modul, ceea ce vă sugerez să faceți din linia de comandă prin drush ro numele_modulului_vou.

Dacă site-ul dvs. nu este prea mare, puteți scăpa de asta, dar dacă este mare, va trebui să vă explorați opțiunile pentru că în cele din urmă PHP va expira.

big_smile avatar
drapel us
În Drupal 7, există oricum pentru a converti un câmp flotant într-un câmp zecimal? Am deja sute de valori în câmpul flotant (știu că unele dintre acestea nu vor fi corecte, dar va trebui doar să trăiesc cu asta). Mulțumiri!
drapel cn
@big_smile folosește https://drupal.stackexchange.com/a/151367/20866 și editează scriptul pentru a seta „precizia” și „scale” corecte.
drapel cn
@big_smile Ne pare rău! Mi-am editat răspunsul de câteva ori când mi-am dat seama că prima mea soluție nu se va ocupa de tot ce ai nevoie.
big_smile avatar
drapel us
Multumesc pentru ajutor! Presupun că merg la PHPmyadmin > Nume bază de date > SQL. Apoi puneți codul în fereastra de interogare și apăsați „Go”. Este corect? Primesc această eroare: `3 erori au fost găsite în timpul analizei. Personaj neașteptat. (lângă „$” la poziția 0) Început neașteptat al declarației. (lângă „$” la poziția 0) Tip de declarație nerecunoscut. (lângă „câmp” la poziția 1) Interogare SQL: $field = 'field_transaction_amount' #1064 - Ai o eroare; verificați manualul care corespunde versiunii de server MySQL pentru sintaxa corectă de utilizat lângă „$field = „field_transaction_amount” la linia 1`
drapel cn
@big_smile Am actualizat răspunsul cu mai multe detalii despre scenariu.
big_smile avatar
drapel us
Mulțumesc mult! `Veți dori să ajustați variabilele din script pentru a se potrivi cu configurația dvs., de exemplu; $câmp, precizie, scară, nu nul.` Pe baza articolelor la care ați conectat, pentru prețuri (de ex. 28,53 sau -15,99), `precizia` și `scale` ar fi `2` și aș lăsa `nu nul` ` ca `nu nul`. Este corect?
drapel cn
@big_smile Precizia este numărul total de cifre, scara este câte după zecimală. Scara dvs. ar trebui să fie setată la 2 și puteți lăsa precizia la 10. Cu precizia la 10, puteți avea 8 cifre înainte de zecimală, astfel încât valorile max/min ar fi de +/-99.999.999,99 respectiv. În ceea ce privește „nu nul”, cred că l-ați seta la TRUE dacă câmpul dvs. ar fi solicitat, cred.
big_smile avatar
drapel us
Am urmat pașii întocmai, dar nu pare să funcționeze. Numele mașinii câmpului meu este field_transaction_amount, deci pentru script am introdus `$field = 'field_transaction_amount';`. Cu toate acestea, rămâne în continuare ca un câmp flotant atât în ​​interfața de utilizare Drupal, cât și în phpmyadmin. Am rulat și Drush CC All și am mers la mysite.com/update, dar niciunul nu a făcut nimic (pagina de actualizare nu avea nici măcar actualizări). Vreo idee? Vă mulțumim pentru tot ajutorul vostru continuu!
drapel cn
Ați activat modulul înainte de a adăuga funcția `hook_update_7000()`? Puteți crea o nouă funcție `hook_update_7001` în fișierul de instalare și drupal va detecta că are ceva nou de rulat. Cel mai probabil veți găsi detaliile de care aveți nevoie pentru ca actualizarea să se declanșeze sub linkul din numărul 2 din răspuns.
Puncte:0
drapel us

Răspunsul lui Ryan Hartman este cel mai bun de folosit. Cu toate acestea, iată o alternativă în cazul în care răspunsul nu funcționează.

  1. Faceți o copie de rezervă a bazei de date.
  2. Exportați baza de date din phpmyadmin. Înainte de a exporta, poate doriți să sortați tabelele după dimensiune și apoi să goliți toate tabelele cache dacă sunt prea mari. De asemenea, puteți goli search_index.
  3. Deschideți software-ul într-o aplicație care poate citi fișiere mari de baze de date, cum ar fi BBedit. Sublime nu pare să facă față dimensiunii.
  4. Căutați ânumăr_floatâ (asigurați-vă că grep este dezactivat)
  5. Veți găsi rezultate ca acestea:â¨(23, „field_nameâ, „number_float”, „number”, 1, „field_sql_storage”, „field_sql_storage”, â¦.)
  6. Inlocuieste „number_float” bit cu „număr_zecimal”,
  7. Repetați pașii 3-5 pentru toate cazurile de ânumăr_floatâ.
  8. Acum căutați âplutiâ
  9. Veți găsi intrări pe mai multe rânduri care încep cu:â¨CREATE TABLE field_data_field_name( â¨În liniile multiple, vor avea o linie ca aceasta: ⨠field_name float DEFAULT NULL
  10. Înlocuiește cuvântul float cu âzecimal(10,2)â.
  11. Repetați pașii de la 8 la 10 pentru toate cazurile de âplutiâ. Cu toate acestea, când căutați, veți întâlni intrări care nu fac referiri la câmpuri, cum ar fi index_căutare și total de căutare. Nu le schimbați.
  12. Salvați fișierul și importați-l în Phpmyadmin. Verificați Drupal pentru a vedea dacă totul este în regulă.

Sfat: Înainte de a exporta la pasul 2, accesați Drupal și creați un câmp inactiv care folosește zecimal. (Dați-i un nume pe care să îl căutați ușor, cum ar fi aaaaa). Completați-l cu câteva intrări false în Drupal.Apoi, când exportați baza de date, puteți studia modul în care Drupal gestionează câmpurile zecimale, astfel încât să știți cum să vă schimbați cel mai bine câmpurile float din baza de date.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.