在php中,为什么是浮点>;字符串或浮点数>;int

在php中,为什么是浮点>;字符串或浮点数>;int,php,Php,在现金转换测试中,我遇到了这个问题。如果我将510设置为intval(),它仍然表示float*100小于string或int。为什么php会这样做 $var = 4.73 + .37; $amt = 510; if($var * 100 > 510){ echo 'wtf'; } 这都是关于浮点运算的。同样的问题也出现在其他所有编程语言中 最简单的例子是: 0.1+0.2=0.300000000000000004 如果使用echo甚至var_dump都看不到它,因为它将被截断以

在现金转换测试中,我遇到了这个问题。如果我将510设置为intval(),它仍然表示float*100小于string或int。为什么php会这样做

$var = 4.73 + .37;
$amt = 510;
if($var * 100 > 510){
    echo 'wtf';
}

这都是关于浮点运算的。同样的问题也出现在其他所有编程语言中

最简单的例子是: 0.1+0.2=0.300000000000000004

如果使用
echo
甚至
var_dump
都看不到它,因为它将被截断以人性化的形式显示,但您可以在这里清楚地看到它:

$a = 0.3; // true 0.3
$b = 0.1 + 0.2; // approximately 0.3

var_dump($a); // 0.3
var_dump($b); // 0.3

var_dump($a == $b); // false

var_dump($a == 0.3); // true
var_dump($b == 0.3); // false

var_dump($a == 0.30000000000000004); // false
var_dump($b == 0.30000000000000004); // true

不要使用浮点数来存储金额,尤其是对其进行任何计算使用美分或定点算法(如果适用)

这都是关于浮点算法的。同样的问题也出现在其他所有编程语言中

最简单的例子是: 0.1+0.2=0.300000000000000004

如果使用
echo
甚至
var_dump
都看不到它,因为它将被截断以人性化的形式显示,但您可以在这里清楚地看到它:

$a = 0.3; // true 0.3
$b = 0.1 + 0.2; // approximately 0.3

var_dump($a); // 0.3
var_dump($b); // 0.3

var_dump($a == $b); // false

var_dump($a == 0.3); // true
var_dump($b == 0.3); // false

var_dump($a == 0.30000000000000004); // false
var_dump($b == 0.30000000000000004); // true

不要使用浮点数来存储金额,尤其是对其进行任何计算-使用美分或定点算术(如果适用)

欢迎使用浮点算术。放置var_dump($var,$amt);在if语句之前。你会在那里找到你的答案。读一下。不要再为了钱而使用浮点数了。使用整数并计算美分。这个问题已经存在,答案在-见红色大警告框中。欢迎使用浮点算术。放置var_dump($var,$amt);在if语句之前。你会在那里找到你的答案。读一下。不要再为了钱而使用浮点数了。使用int和count cents。这个问题已经存在,答案在-见红色大警告框中。+1不要使用浮动来存储货币amount@Adassko我们应该用什么来储存钱呢?如果他大胆地眨眼的话,我会加1@SatishSharma输入并计算美分。这是一个比其他线程更好的答案。另外,当谷歌搜索并将问题输入堆栈时,另一个问题也没有出现。谢谢你再举一个实际的例子。+1不要用浮点数来存钱amount@Adassko我们应该用什么来储存钱呢?如果他大胆地眨眼的话,我会加1@SatishSharma输入并计算美分。这是一个比其他线程更好的答案。另外,当谷歌搜索并将问题输入堆栈时,另一个问题也没有出现。谢谢你再举一个实际的例子。