2016-08-02 24 views
2

Ich versuche, Bau Stationierung zu formatieren, aber ich kann nicht herausfinden, wie die preg_replace-Funktion erhalten eine variable Anzahl von führenden Zeichen zu akzeptieren. Das Format ist [Variable führende Zeichen] + XX.XX Das ist, was ich jetzt bin mit:PHP Zahlenformat (Bau Station)

Eingang:

0 
20 
160 
5005.5 
30096.56 
1000000000.00 

Funktion:

function formatStation($number){ 
    $number = sprintf('%06.2f', $number); 

    $number = preg_replace('/([0-9])([0-9]{2})/', '$1+$2', $number); 
    return $number; 
} 

Ausgang:

0+00.00 
0+20.00 
1+60.00 
5+005.50 <- 
3+0096.56 <- 
1+000000000.00 <- 

Der korrekte Ausgang sollte sein:

0+00.00 
0+20.00 
1+60.00 
50+05.50 <- 
300+96.56 <- 
10000000+00.00 <- 
+4

"Bau Stationierung" ist, was? –

+0

Der nächste Satz erklärt es. Das Format ist XXX ... XX + XX.XX. Es wird in der Straßenbauindustrie verwendet. – gunnarrr

+3

Während diese Codes aus numerischen Symbolen bestehen, sind sie keine Zahlen und sollten nicht als solche gespeichert werden, insbesondere nicht, wenn führende Nullen eine inhärente Bedeutung haben, und * insbesondere * nicht als Gleitkommazahlen, da sie inhärent ungenau sind. Speichern Sie diese Codes als * Strings *. Speichern Sie Dinge nur als numerische Typen, wenn Sie sie mathematisch berechnen möchten. – Sammitch

Antwort

1

Hier ist der Code, der entsprechend Ihrer Zuordnung arbeiten:

function formatStation($number){ 
    $number = sprintf('%06.2f', $number); 

    $number = preg_replace('/([0-9])([0-9]{2}\.[0-9]{2})/', '$1+$2', $number); 
    return $number; 
} 

Here you can test it.

+0

Das funktioniert! Vielen Dank! – gunnarrr

+0

Mein Vergnügen. Freut mich zu helfen :-) –

0

Da dies streng auf String Position basiert es auch ohne Regex substr getan werden kann.

function formatStation($number){ 
    $n = sprintf('%06.2f', $number); 
    return substr($n, 0, strlen($n) - 5) . '+' . substr($n, -5); 
} 
1

Mit substr_replace:

function formatStation($number) 
{ 
    return substr_replace(sprintf('%06.2f', $number), '+', -5, 0); 
} 
+0

Oh, schön! Ich hatte vergessen, dass 'substr_replace' eigentlich nichts ersetzen muss. –