читать формат валюты - PullRequest
       9

читать формат валюты

1 голос
/ 05 января 2011

возможно, для некоторых это легко, но я хочу выучить

Существует 2 формата валюты:

формат первой валюты: 1 123 123,12 , и этот формат может быть таким: 1 123 123,12.12 или 1 123 123,12 € и

формат второй валюты: 1.123.123,12 , и это может быть такой $ 1.123.123,12 или 1.123.123,12 € , поэтому разница такое расположение точек и запятых

Приведенный выше формат будет

$this->value('one of the currency format insert here');

например. $this->value('$1,123,123.12'); или $this->value('1.123.123,12€');

, который я хочу знать, это код if (first currency format) {use blah .. blah ..} elseif (second currency format) {use blah .. blah ..} else {/ / unsupported format}

так как же код для определения того, вводится ли запись в формате первой валюты или в формате второй валюты?

спасибо за ваши советы и идеи.

ОБНОВЛЕНИЕ:

Я прошу прощения за ошибку в приведении примеров

Когда я пытался протестировать код, я немного запутался, потому что он, кажется, не работает

затем я изменил свои предыдущие части, так что $ value ['amount'] может быть использовано

формат первой валюты 1,123,123.12 , и этот формат может быть таким: 1 123 123,12.12 или 1 123 123,12 € и

формат второй валюты 1.123.123,12 , и это может быть такой $ 1.123.123,12 или 1.123.123,12 €

затем значение ['сумма'] сначала будет идентифицироваться с кодом, подобным следующему условному

class curr_format {

private bla...bla..1
private bla...bla..2
var etc..

    public function curr_format ($bla...,$and_bla..) {

//then make conditional is here
if (first currency format) {//use blah .. blah ..} 
elseif (second currency format) {//use blah .. blah ..} 
else {/ / unsupported format}
//another codes..

в конце вывода, как выглядит:

$identify = new curr_format();
echo $identify->curr_format($value['amount'],$else_statement);

Ответы [ 3 ]

2 голосов
/ 05 января 2011

Проверьте, что является последним 3 символом, если это "," или ".". Используйте это, чтобы определить формат вашей валюты.

$value =  "1,123,123.12";
if($value[strlen($value)-3]==',') $currency_format = "A";
else $currency_format="B";
1 голос
/ 05 января 2011

При условии, что вы работаете только с долларами и евро (или фунтами или чем-то еще, имеющим две десятичные цифры), самое простое решение:

var value = str_replace('€','',$this->value);

if (substr($value,str_len($value)-3,1)=='.') {
  // first format
}
else if (substr($value,str_len($value)-3,1)==',') {
  // second format
}
else {
  // unsupported
}

В противном случае вам придется настроить цикл,повторяет символы по очереди или определяет количество цифр в зависимости от валюты.

1 голос
/ 05 января 2011
function getNumber( $inStr ){
  if( preg_match( '/[\,\.]\d{2}\D?$/' , $inStr ) ){
   # Has 2 Decimal Places
    return (float) preg_replace( '/\D/' , '' , $inStr )/100;
  }
  return (int) preg_replace( '/\D/' , '' , $inStr );
}

В тех случаях, когда есть 2 десятичных знака, мы удаляем все нецифровые символы, а затем делим на 100 (тем самым заменяя десятичные знаки). Если нет 2 десятичных знаков, мы просто удаляем все нецифровые символы.

...