1
  1. 我想将这种类型的数字格式插入到我的数据库中。

    $value = "20.000,00";
    

    我尝试使用FLOATand DOUBLE,但他们无法处理。剩下的唯一选择是我知道哪个有效VARCHAR

  2. 虽然如果我稍后在处理数字时这样做并尝试从彼此中减去数字:

    $value2 = "15.933,50";
    $calc = $value - $value2;
    

    $calc现在4.067,应该是4.066,50——这怎么可能是正确的?

4

1 回答 1

3

对于财务数字,您应该使用DECIMAL 类型。它具有固定的精度,不受浮点数舍入问题的影响。

切勿将货币号码存储在 VARCHAR 或 FLOAT 中。

如果你想在数据库中引入你的$value,你必须解析它,以便你可以引入数字:

$fmt = new NumberFormatter( 'da_DK', NumberFormatter::DECIMAL );
$num = $fmt->parse($value, NumberFormatter::TYPE_INT32)

要将您从数据库中获得的数字显示为“20.000,00”,您可以使用

$display_value = $fmt->format($num);

编辑 :

如果您不能使用 NumberFormatter,您可以使用它来构建一个可以在 DECIMAL 字段中引入的字符串(也可以在浮点字段中,但不要):

$v = str_replace(',', '.', str_replace('.', '', $value));

数据库可以理解的"20.000,00"这种变化。"20000.00"但是要求数据库将字符串解析为数字总是很危险的(稍后您可能会更改语言环境)。我建议您在 PHP 中解析数字并明确指定语言环境。

于 2012-09-23T11:46:42.290 回答