Feld mit 6 Nachkommastellen [Gelöst]

  • frohike frohike
    T3PO
    0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    21. 10. 2008, 21:19

    Hi,

    wenn ich ein Feld zu einer Zahl mit 2 Nachkommastellen machen will, dann schreibe ich in die TCA

    1. 'eval' => 'double2',

    Wenn ich aber [b]6 Nachkommastellen[/b] brauche (geographische Koordinaten), mache ich was?

    Folgendes habe ich schon ausprobiert:
    1) Als Text speichern: funktioniert zwar, allerdings habe ich die Befürchtung dass das die Datenbank verlangsamt bei SQL-Konstrukten wie:

    ORDER BY (pow((42.5 - longitude)*74132, 2) + pow((16.8 - latitude)*111200, 2))

    Kann mir da jemand sagen, ob ich mit meiner Vermutung richtig liege? Ich meine mal abgesehen davon, dass es in jedem Fall sehr rechenintensiv wird. Oder vielleicht kennt ja jemand eine bessere Methode um Orte nach Entfernung zu einem Fixpunkt zu sortieren?

    2) Die Datenbankfelder zu float(10,6) machen, in der TCA das Feld als Text deklarieren: Speichern im Backend funktioniert nicht (Fehlermeldung von nicht übereinstimmenden Datentypen)

    Da gibts die Referenz:
    [url]http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/4/2/#id4080919[/url]

    [/quote][/code]


  • 1
  • frohike frohike
    T3PO
    0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    23. 10. 2008, 21:23

    Hi,

    nach viel herumprobieren habe ich folgendes herausgefunden: TYPO3 funktioniert. MySQL ist fehlerhaft.

    UPDATE mytable SET latitude='48.181172' WHERE uid=1;

    setzt das Feld latitude auf 48.18117[b]1[/b] - das ist in der letzten Stelle eine Abweichung :o Das Feld ist mit float(10,6) definiert.

    Werde mal auf der MySQL Website weiter recherchieren...

    LG
    Markus[/quote]

  • frohike frohike
    T3PO
    0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    23. 10. 2008, 22:08

    So, hab's gelöst:
    1) In MySQL den Datentyp DECIMAL statt FLOAT verwenden
    2) In der TCA type=>input, eval=>tx_float6
    3) tx_float6 definieren, in etwa so:

    1. class tx_float6 {
    2. function returnFieldJS() {
    3. return '
    4. return value;
    5. ';
    6. }
    7. function evaluateFieldValue($value, $is_in, &$set) {
    8. return sprintf('%01.6f', $value);
    9. }
    10. }

    Beispiel: [url]http://typo3.org/fileadmin/dl/T3X_example_extraevaluations-0_4_0-z-200603260125.t3x[/url]

    Hoffe jemand kann diese Info gebrauchen...

    Ach ja, sollte jemand Erfahrung oder einen Link zum Thema Performance bei Berechnungen mit den MySQL Datentypen float vs. decimal vs. varchar haben, bin ich für Info dankbar :)

    Grüße
    Markus

  • mano mano
    T3PO
    0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    16. 01. 2010, 15:54

    Hallo,

    ich habe das nun so gemacht jedoch erhalte ich beim Speichern der Daten im Plugin folgende Meldung:

    102: These fields are not properly updated in database: (longitude) Probably value mismatch with fieldtype.

  • 1