|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #8097 printf() and float data vs.setlocale()
Submitted: 2000-12-04 13:08 UTC Modified: 2002-11-08 01:00 UTC
Avg. Score:4.5 ± 0.9
Reproduced:3 of 3 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: hh at loca dot net Assigned:
Status: No Feedback Package: Strings related
PHP Version: 4.0.3pl1 OS: Linux (SuSE 7.0)
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please — but make sure to vote on the bug!
Your email address:
Solve the problem:
33 - 18 = ?
Subscribe to this entry?

 [2000-12-04 13:08 UTC] hh at loca dot net
Changing the locale setting to a country that uses comma (,)
as the decimal seperator will stip off decimal places from
the float value in printf/sprintf. Example:

MySQL table:

	create table test (
	    name varchar(100),
	    value float(16,2)

	insert into test values ('bla', 3.789);

PHP code:

	setlocale("LC_ALL", "de_DE");
	// mysql_connect etc.
	$row = mysql_fetch_array($result);
	printf("%s: %.2f",
	    $row["name"], $row["value"]);


	bla: 3.00


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2001-07-31 16:14 UTC]
unable to reproduce with latest version of PHP, please
upgrade and re-open if still a problem.
 [2002-10-23 06:53 UTC] kaatz at wwe dot biz
This problem also exits in our application which runs on php-4.2.3.
We use 'setlocale' there to handle gettext translations. With LC_ALL set by 'setlocale' all prices in the shopping basket and VAT calculations with floats are 'calculated wrong'

Thanks for that hint.
 [2002-10-23 07:04 UTC]
Please try using this CVS snapshot:
For Windows:

 [2002-11-08 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over 2 weeks, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 [2006-11-29 09:30 UTC] essen at dev-extend dot eu
Version: 5.1.6

Linux 2.4. Don't know exactly which Linux, it's the one on 1&1.
I encountered this bug on 5.1.6 but I can't test on 5.2.
Since this bug seems old and has been closed all this time I guess it isn't fixed yet.
It works probably on all locales enabled systems. But maybe not.

I won't be able to test it because I don't have the  LC_NUMERIC locales and don't really know how to install them on NetBSD.

However I can help you reproduce this bug.

You need to use a locale from a country that uses comma (,)
as the decimal seperator, as said hh before. You must have all the locale category installed (but LC_NUMERIC is probably the only one really needed). You only have to do this:


setlocale(LC_ALL, 'fr_FR'); // or 'de_DE' or others, too
printf('%.2f', 42.4242);


This will print "42.00".
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Jul 18 07:01:28 2024 UTC