Updated FormatConverter to Format Price based on Currency (if provided)

- Fixes #176 Issue
- Renamed formatToTwoDecimalPlaces to formatToNumber
This commit is contained in:
japatel
2014-12-08 17:11:33 -06:00
parent 8bb80cb843
commit 7c4a16ca3d
8 changed files with 106 additions and 15 deletions

View File

@@ -19,14 +19,56 @@ class FormatConverter {
/**
* Format the input data to two decimal places
*
* @deprecated Use formatToNumber instead
* @param $value
* @return string
*/
public static function formatToTwoDecimalPlaces($value)
{
return self::formatToNumber($value);
}
/**
* Format the input data with decimal places
*
* Defaults to 2 decimal places
*
* @param $value
* @param int $decimals
* @return null|string
*/
public static function formatToNumber($value, $decimals = 2)
{
if (trim($value) != null) {
return number_format($value, 2, '.', '');
return number_format($value, $decimals, '.', '');
}
return null;
}
/**
* Helper method to format price values with associated currency information.
*
* It covers the cases where certain currencies does not accept decimal values. We will be adding
* any specific currency level rules as required here.
*
* @param $value
* @param null $currency
* @return null|string
*/
public static function formatToPrice($value, $currency = null)
{
$decimals = 2;
$currencyDecimals = array('JPY' => 0, 'TWD' => 0);
if ($currency && array_key_exists($currency, $currencyDecimals)) {
if (strpos($value, ".") !== false && (floor($value) != $value)) {
//throw exception if it has decimal values for JPY and TWD which does not ends with .00
throw new \InvalidArgumentException("value cannot have decimals for $currency currency");
}
$decimals = $currencyDecimals[$currency];
} else if (strpos($value, ".") === false) {
// Check if value has decimal values. If not no need to assign 2 decimals with .00 at the end
$decimals = 0;
}
return self::formatToNumber($value, $decimals);
}
}