【问题标题】:Using double/float in php [duplicate]在 php 中使用 double/float [重复]
【发布时间】:2013-01-03 21:41:49
【问题描述】:

可能重复:
PHP: show a number to 2 decimal places

$b = $del['Antal'];
$y = $info['Pris'];
$z = $y * $b;

$y 来自一个 mysql 数据库,它的类型是“double(10,2)”,所以当我尝试 echo $y; 时它可以工作。它以两位小数响应。

但现在我想将它与 $b 相乘。

例如 10.20 * 2 = 20.40

但现在是这样的: 10.20 * 2 = 20.4(只有一位小数)

我想要两位小数,怎么办?我用 (double) 函数尝试了一些东西,但并没有真正奏效。怎么办?

【问题讨论】:

    标签: php floating-point


    【解决方案1】:

    你可以使用number_format

    $b = $del['Antal'];
    $y = $info['Pris'];
    $z = number_format($y * $b ,2);
    

    number_format 函数:

    string number_format ( float $number [, int $decimals = 0 ] )
    

    如果你不想要默认格式:

    string number_format ( float $number , int $decimals = 0 , string $dec_point = '.' , string $thousands_sep = ',' )
    

    【讨论】:

    • 这部分有效...但是 1 * 1670.10 = 1,670,10 这是不正确的:(
    • “部分”是什么意思?
    • 第三个和第四个参数是 dec_point 和数千个_sep 所以如果你想要 1670.10 你可以做 number_format($y * $b ,2, ".", "")。
    • 我知道你不想要一个字符串,因为你想做更多的数学,但是如果你想做更多的数学,为什么你关心有 1 或 2 个浮点数......你应该只关心关于将在最后打印的字符串。
    • 好的,我把它改成了 $z = number_format($y * $b ,2, '.', '');正如php手册所说,谢谢。
    【解决方案2】:

    您可以通过使用 sprintf 并将其存储为字符串来确保将其存储在小数点后两位:

    $z = sprintf('%.2f', $y * $b);
    

    %.2f 确保小数点后始终有两位数。

    【讨论】:

    • 这个对我不起作用,因为我以后必须用 $z 做更多的数学运算。所以我不能把它存储为字符串
    • 您可以将其重新转换为浮点数。
    【解决方案3】:

    您描述的数据类型是固定点数,而不是浮动点数(float)。 PHP 没有这样的数据类型,但它可以为您提供format 浮动。看起来这就是您正在寻找的,格式化输出。

    【讨论】:

    • 它有一个浮点类型,但它是隐藏的。在最自然的 php 级别中,您使用标量类型,但在较低级别,您使用真正的类型。一个证据是函数is_int,例如当你说is_int("14")时,它会回答false。您还可以使用强制转换运算符。所以让-菲利普·邦德有正确的答案。
    • @artragis 你错过了我的观点。我说过,PHP 没有 fixed point 数据类型(如 MySQL 中的 decimal(10,2))。当然它有花车,我看不出它是如何隐藏的。
    • 哦,是的,你是对的,误读了你。
    【解决方案4】:

    试试floatval:

    $z = $y * floatval($b);
    

    或者:

    $b = (float) $b;
    

    但是,如果将它乘以 10.20,它应该会自动转换为浮点数。在 type juggling 上阅读 PHP 的文档。


    如果它只是一个造型的东西:

    $b = number_format($b, 2);
    

    【讨论】:

    • 将其转换为浮点数并不能确保两位小数。不过,我不是反对者。
    猜你喜欢
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多