У меня проблема с двумя десятичными разрядами, я хочу, чтобы она составляла 35,99 долларов США вместо 3599 долларов США.
Эта проблема возникла, когда я продолжал обновлять свою страницу в целях тестирования. Иногда цена не показывает десятичных разрядов, но возвращается к норме после того, как я продолжаю тестировать свою страницу.
Кто-нибудь знает почему так?
Ниже мой php код:
// format for currency values
function cartweaverMoney($theNum) {
$cwLocaleInfo = localeconv();
$cwLocaleInfo["currency_symbol"] = 'USD ';
$retStr = number_format($theNum,
2,
$cwLocaleInfo["mon_decimal_point"],
$cwLocaleInfo["mon_thousands_sep"]);
if ($cwLocaleInfo["p_cs_precedes"]) {
if ($cwLocaleInfo["p_sep_by_space"]) {
$retStr = " ".$retStr;
}
$retStr = $cwLocaleInfo["currency_symbol"].$retStr;
} else {
if ($cwLocaleInfo["p_sep_by_space"]) {
$retStr .= " ";
}
$retStr .= $cwLocaleInfo["currency_symbol"];
}
return $retStr;
}
Перед localeconv () вы должны использовать ‘setlocale’:
setlocale(LC_ALL, "en_US");
$locale_info = localeconv();
http://php.net/manual/it/function.localeconv.php
или, может быть, проверьте этот код:
http://php.net/manual/it/function.number-format.php
<?php
$var = number_format(2234,2);
$var = number_format($var,2);
echo $var;
# Expected Output: 2,234.00
# Actual Output: 2.00
?>
//To fix, remove the thousands separator by setting the decimal point and thousands separator parameters like so:
<?php
$var = number_format(2234,2,'.','');
$var = number_format($var,2,'.','');
echo $var;
# Expected Output: 2234.00
# Actual Output: 2234.00
?>
Наслаждайтесь вашим кодом!
Отредактировано:
Я сделал в системе Windows, чтобы напечатать возвращение массива localconv (), это void.
setloca
le(LC_ALL, "en_US");
$cwLocaleInfo = localeconv();
function print_locale_conv($locale_info) {
echo "<pre>\n";
echo "--------------------------------------------\n";
echo " Informazioni sulla configurazione monetaria locale: \n";
echo "--------------------------------------------\n\n";
echo "int_curr_symbol: {$locale_info["int_curr_symbol"]}\n";
echo "currency_symbol: {$locale_info["currency_symbol"]}\n";
echo "mon_decimal_point: {$locale_info["mon_decimal_point"]}\n";
echo "mon_thousands_sep: {$locale_info["mon_thousands_sep"]}\n";
echo "positive_sign: {$locale_info["positive_sign"]}\n";
echo "negative_sign: {$locale_info["negative_sign"]}\n";
echo "int_frac_digits: {$locale_info["int_frac_digits"]}\n";
echo "frac_digits: {$locale_info["frac_digits"]}\n";
echo "p_cs_precedes: {$locale_info["p_cs_precedes"]}\n";
echo "p_sep_by_space: {$locale_info["p_sep_by_space"]}\n";
echo "n_cs_precedes: {$locale_info["n_cs_precedes"]}\n";
echo "n_sep_by_space: {$locale_info["n_sep_by_space"]}\n";
echo "p_sign_posn: {$locale_info["p_sign_posn"]}\n";
echo "n_sign_posn: {$locale_info["n_sign_posn"]}\n";
echo "</pre>\n";
}
?>
Итак, я прочитал это:
http://php.net/manual/it/function.setlocale.php
и я изменил параметр для localeconv ():
$lang = "us_US";
$language = 'english';
$codeset = "UTF8"; // warning ! not UTF-8 with dash '-'
date_default_timezone_set('Europe/Rome');
setlocale(LC_ALL, array($lang.'.'.$codeset,$lang.'@euro',$lang,$language));
$cwLocaleInfo = localeconv();
print_locale_conv($cwLocaleInfo);
С этими работами!
Для системы * nix попробуйте использовать это:
$lang = "us_US";
$language = 'english';
$codeset = "UTF8"; // warning ! not UTF-8 with dash '-'
putenv('LANG='.$lang.'.'.$codeset);
putenv('LANGUAGE='.$lang.'.'.$codeset);
Других решений пока нет …