【问题标题】:php currency takephp 货币取值
【发布时间】:2012-06-20 05:22:01
【问题描述】:

我需要知道如何服用

10.25 转成 1025

基本上它需要从任何数字中删除句号,例如 1500.25 应该是 150025

【问题讨论】:

  • 1500.25 是浮点数还是字符串?

标签: php numbers currency


【解决方案1】:
$number = str_replace('.','',$number);

【讨论】:

  • str_replace 会起作用,但如果他的值为 10.3567(例如,平均成本)怎么办?无论输入是什么,下面的答案(乘以 100 并转换为 int)都将起作用。
  • 如果 $number 是浮点值,这真的很危险。如果浮点数不能准确地描述该值并且出现更多小数位会发生什么?如果值为1500.3,会发生什么?
  • @Fluffeh,@Emil Vikström。我们无法真正解决 op 的问题,因为我们不知道问题是什么。我们能做的就是回答问题。问题是:how to take 10.25 and turn it to 1025,所以答案是使用str_replace,它会在这里工作。如果问题与问题不符,我们概不负责
  • k102,你当然是对的!你回答这个问题值得我投赞成票。在所问的问题中,10.3567 在“删除句号”时当然会变成103567
【解决方案2】:

如果货币是浮点数:乘以 100(并将结果转换为 int)。

$currency = 10.25;
$number = (int)($currency * 100); //1025

请注意,此解决方案只会保存前两位小数 - 如果您有像 10.123 这样的数字,3 将被截断而不四舍五入。

【讨论】:

  • 在处理需要精确的值时应避免使用浮点运算(货币处理必须始终精确)。
  • 你是绝对正确的,但如果它之前是一个浮点数,你可能已经被搞砸了,因为可能会使用它来计算其他东西。如果您想要准确,请在任何地方使用实数,并且只使用浮点数进行显示 - 但这里显然不是这种情况,因为不应该有任何理由回退。
  • 但是我们知道它是一个浮点值吗?它可能是一个字符串,在这种情况下,您的解决方案会将其转换为浮点数。我认为如果 $currency 已经是一个浮点数(我几乎发布了完全相同的答案),这是最好的解决方案,但如果它实际上是一个字符串,你应该做字符串工作。
【解决方案3】:

浮点运算的定义并不准确。因此,如果它是一个字符串,则不要将值转换为浮点数,如果它是浮点数,则避免将其转换为字符串。

这是一个检查值类型的函数:

function toCents($value) {
  // Strings with a dot is specially handled
  // so they won't be converted to float
  if (is_string($value) && strpos($value, '.') !== false) {
    list($integer, $decimals) = explode('.', $value);
    $decimals = (int) substr($decimals . '00', 0, 2);
    return ((int) $integer) * 100 + $decimals;

  // float values are rounded to avoid errors when a value
  // like ".10" is saved as ".099"
  } elseif (is_float($value) {
    return round($value * 100);

  // Other values are strings or integers, which are cast
  // to int and multiplied directly.
  } else {
    return ((int) $value) * 100;
  }
}

【讨论】:

    【解决方案4】:

    如果您只想替换一个字符,请使用 strtr 代替 str_replace

    $number = str_replace('.','',$number);
    

    $number = strtr($number, array('.', ''));
    

    输出相同,但 strtr 更好。

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 2014-12-07
      • 2012-02-22
      相关资源
      最近更新 更多