PHP:字符串类型转换

cgvd09ve  于 2022-11-28  发布在  PHP
关注(0)|答案(1)|浏览(121)

我正在使用en_US语言环境的计算机上运行这段PHP代码

setlocale(LC_ALL,'de_DE.utf8');
var_dump((string)1.234);

返回

string(5) "1.234"

而在我同事的机器上(该机器的区域设置为德语),它返回

string(5) "1,234"

为什么PHP在将float类型转换为字符串时要使用locale呢?我怎么才能禁用它呢?我想让这个函数在所有机器上返回string(5)“1.234”,而不管任何locale设置。
其次,也是次要的:为什么PHP会忽略我机器上的setlocale?

tzcvj98z

tzcvj98z1#

为什么PHP在将float类型转换为字符串时要使用locale?
这就是它的行为
如何禁用它?
(据我所知)你不能。
如果安装了locale,则可以将locale设置为en_US
我想让这个函数在所有机器上返回string(5)“1.234”,而不考虑任何区域设置。
您有几个选项:

$num = 1.234; 

/* 1 - number format                            */

$str = number_format( $num, 3, '.', '' );
       
/*     you get exacly the number of digits      *
 *     passed as 2nd parameter.  Value  is      *
 *     properly rounded.                        */


/* 2 - sprintf                                  */

$str = sprintf( '%.3F', $num );

/*     you get exacly the number of digits      *
 *     specified bewtween `.` and `F`.          *
 *     Value is properly rounded.               */


/* 3 - json encode                              *
 *     optionally setting serialize_precision   */

ini_set( 'serialize_precision', 3 );
$str = json_encode( (float) $num );

/*     you get  -AT MOST-  the  number  of      *
 *     digits   as   per  language  option      *
 *     `serialize_precision`                    *
 *     If the number  can  be  represented      *
 *     with less digits  without  loss  of      *
 *     precision then trailing zeroes  are      *
 *     trimmed.                                 *
 *     If  `serialize_precision`  is  `-1`      *
 *     then all the available decimals are      *
 *     written.                                 *
 *     Note that altering the language opt      *
 *     affect all foat serialization funcs      *
 *     so you may want to set it  back  to      *
 *     its   previous  value   after   the      *
 *     conversion.                             *
 *     Value is  properly  rounded  unless       *
 *     `serialize_precision` is set to -1.      */

其次,也是次要的:为什么PHP会忽略我机器上的setlocale?
DevZer0所述,您可能没有安装语言环境。

相关问题