PHP将float转换为int返回不同的值

时间:2015-09-15 15:13:15

标签: php casting

当我在PHP(v5.5.9)中执行以下代码时,会出现意外情况:

float 54780
int 54779

返回

@charset "utf-8";
/* CSS Document */
@import url(http://fonts.googleapis.com/css?family=Vidaloka|Philosopher);

* {
	box-sizing : border-box;
}

#wrapper {
	max-width: 940px;
 	margin: 0 auto;
 	padding: 0;
 }

.sectionPage {
	width: 100%;
	height: 100vh;
}


/* ==========================================================================
   BACKGROUND
   ========================================================================== */
#home,
#skills,
#contact {
	background-color: #000000;
background-image: url(http://www.transparenttextures.com/patterns/subtle-dots.png);
}

#about,
#work,
#services {
	background-color: #fcfcfc;
background-image: url(http://www.transparenttextures.com/patterns/skulls.png);
}

/* ==========================================================================
   FOR TITLE OF ALL SECTION PAGE
   ========================================================================== */


h1 {
	text-align: center;
	font-size: 30px;
	font-family: 'Vidaloka', serif;
}


/* ==========================================================================
   HOME
   ========================================================================== */
p {
	font-family: 'Philosopher', sans-serif;
}

#home > img {
	text-align: center;
	margin-top: 5em;
	margin-left: 44.5%;
}

#home > h1 {
	color: #ffffff;
	margin-top: 2em;
	margin-bottom: 2em;
	font-size: 2em;
}

#home > a {
	font-size: 16px;
	font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
	text-decoration: none;
	color: #ffffff;
	border-radius: 25px;
	background-color: #1199C3;
	padding: 10px;
	text-align: center;
	margin-left: 45%;
}

#home > a:hover {
	color: #000000;
	background-color: #0B637E;
}


/* ==========================================================================
   ABOUT
   ========================================================================== */

#about > h1 {
	color: #1199C3;
	top: 8%;
	position: relative;
}


.wrapper > img {
	background-size: cover;
	background-repeat: no-repeat;
	border: 5px;
	border-radius: 50%;
	border-color: #ffffff;
	border-style: solid;
	width: 120px;
	height: 140px;
	margin-top: 1%;
	margin-bottom: 0;
}

.wrapper {
  margin: 10px auto;
  text-align: center;
  background-color: #1199C3;
  padding-bottom: 0.1%;
  padding-top: 2%;
  width: 25%;
  border-radius: 3%;
  position: relative;
  top: 6%;
}

.wrapper > p {
	font-size: 20px;
	color: #ffffff;
}

#about > p {
	text-align: center;
	font-size:18px;
	margin-left: 2em;
	margin-right: 2em;
	position: relative;
	top: 5%;
	}

#about > a {
	font-size: 16px;
	background-color: #1199C3;
	border-radius: 5px;
	color: #ffffff;
	text-decoration: none;
	padding: 1%;
	margin-left: 41%;
	font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
}

#about > a:hover {
	color: #1199C3;
	background-color: #0B637E;
}

#about > a {
	position: absolute;
	top: 198%;
	left: 0em;
}


/* ==========================================================================
   SKILLS
   ========================================================================== */

#skills > h1 {
	color: #1199C3;
	font-size:2.5em;
	padding-top: 5%;
}

#skills > p {
	text-align: center;
	color: #ffffff;
	font-size: 28px;
	line-height: 0%;
	padding: 5%;
}

.gallery > img, {
	text-align: center;
	margin-top: 3em;
	margin-right: 0;
}

.gallery > li {
	display: inline;
	list-style: none;
}

.gallery {
	left: 28%;
	position: relative;
}

.software > img {
	text-align: center;
	margin-top: 3em;
	margin-right: 0;
}

.software > li {
	display: inline;
	list-style: none;
}

.software {
	left: 33%;
	position: relative;
}

/* ==========================================================================
   WORK
   ========================================================================== */

#work > h1 {
	color: #1199C3;
	font-size:2.5em;
	padding-top: 5%;
}

#work > p{
	text-align: center;
	font-size:18px;
	padding-top: 5%;
	margin-left: 2em;
	margin-right: 2em;
	}
	
#work > a {
	background-color: #1199C3;
	border-radius: 5px;
	color: #ffffff;
	text-decoration: none;
	padding: 1%;
	margin-left: 40%;
	margin-top: 6em;
	font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
}

#work > a:hover {
	color: #1199C3;
	background-color: #0B637E;
}

.tweet, .msg {
	text-decoration: none;
	color: #1199C3;
}

 
/* ==========================================================================
   SERVICES
   ========================================================================== */

#services > h1 {
	color: #1199C3;
	font-size:2.5em;
	padding-top: 5%;
}

#services > img {
	text-align: center;
	padding-top: 3%;
	padding-left: 2%;
	padding-right: 2%;
	margin-left: 15%;
	width: 70%;
	height: auto;
}

#services > p{
	text-align: center;
	font-size:18px;
	padding-top: 2%;
	margin-left: 2em;
	margin-right: 2em;
	}

/* ==========================================================================
   CONTACT
========================================================================== */
	
#contact > h1{
	color: #1199C3;
	font-size:2.5em;
	padding-top: 3%;
	position: relative;;
	top: 3%;
}

#contact > p {
	text-align: center;
	font-size:18px;
	padding: 1%;
	color: #ffffff;
	line-height: 2px;
	
}

.container{
	width: 50%;
	height: 50%;
	padding: 2%;
	margin-top: 1em;
	margin-left: 25%;
	background-color: #0B637E;
	border-radius: 5px;
}

#name, #email, #bio{
	border-radius: 5px;
	border-style: solid;
	border-color: #1199C3;
	width: 100%;
	padding: 2%;
	margin-top: 1em;
	font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
}

#bio {
	height: 140px;
}

#name, #email, #bio {
	font-size: 14px;
	color: #000000;
}

#button {
	position: relative;
	top:5px;
	border-radius: 3px;
	border-color: #1199C3;
	border-style: solid;
	background-color: #FFFFFF;
	color: #000000;
	padding: 5px;
	float: right;
}
	
#contact > ul {
	margin-left: 25%;
}
#contact > ul > li {
	list-style: none;
	display: inline-block;
	margin-left: 5%;
}

#contact > ul > li > a {
	color: #ffffff;
	text-decoration: none;
}

#contact > ul > li > a:hover {
	color: #1199C3;
}

/* ==========================================================================
   FOOTER
   ========================================================================== */

footer {
	background-color: #1199C3;
	position: relative;
	bottom: 0%;
}

footer > ul {
	padding-left: 8%;
	padding-top: 1%;
	margin-left: 27%;
}

footer > ul > li {
	list-style: none;
	display: inline-block;
	padding-left: 1%;
	padding-top: 1%;
	font-size: 12px;
	text-align: center;
}

footer > ul > li > a {
	text-decoration: none;
	color: #ffffff;
	margin-left: 0;
}

footer > ul > li > a:hover {
	color: #000000;
}

footer > p {
	color: #ffffff;
	text-align:center;
	padding-bottom: 2%;
	position: relative;
	bottom: 8%;
}

所以显然没有小数的浮点值不等于int值。关于这里发生了什么的任何想法?

1 个答案:

答案 0 :(得分:3)

当你将$ valueAsCents = 54780/100分开时,它就变成了一个浮点数,由于它们的存储方式,它在数字形式上并不总是准确的。在我的测试中,我得到了     547.7999999999999545252649113535881042480468750000

当乘以100时,这将是
    54779.9999999999927240423858165740966796870000

当PHP转换为int时,它总是向下舍入 When converting from float to integer, the number will be rounded towards zero.

这就是int值为54779

的原因

此外,PHP manual for float type还包含一个提示,浮点数可能无法达到预期效果。

  

此外,基本10中的浮点数精确表示的有理数,如0.1或0.7,没有精确表示为基数2中的浮点数,无论尾数的大小如何,它都在内部使用。因此,它们不能在没有很小精度损失的情况下转换为它们的内部二进制对应物。这可能会导致令人困惑的结果:例如,floor((0.1 + 0.7)* 10)通常会返回7而不是预期的8,因为内部表示将类似于7.9999999999999991118 ....