0,699 x 100 = 69,89999999999999?

6 Cevap php

Possible Duplicates:
Why does 99.99 / 100 = 0.9998999999999999
Dealing with accuracy problems in floating-point numbers

Ben php ve javascript bu sorunu gördüm. Ben bu dizi var: float 0.699

if I do this: 0.699 x 100 = 69.89999999999999

neden?

edit

round(0.699 x 10, 2): yüzer 69,90000000000001

6 Cevap

Kayan noktalı aritmetik kesin değildir.

Sorunun daha derin bir tartışma için Floating point on Wikipedia bakınız.

Bu geçmişte bana yardımcı oldu budur. Bu işler ikili nasıl temsil edildiği ile ilgili bir çok şey vardır. Ikili temelde uzun lafın kısası büyük sayılar tüm reel sayılar için kesin bir sayı yoktur.

Aşağıdaki link sizin için daha detaylı olarak anlatacağız.

What Every Computer Scientist Should Know About Floating-Point Arithmetic

Bu herhangi bir dilde olacak. Şamandıralar, bir bilgisayarda her şey gibi, ikili olarak depolanır. Sayısı 0.699, tam ondalık gösterilebilen, muhtemelen ikili bir yinelenen ondalık, bu yüzden kesin bir hassasiyetle saklanabilir yapamaz.

Yüzer nasıl depolandığı için wikipedia entry check out, ve neden bu olur.

Javascript numaraları floating point.

The complete javascript number reference bir göz atın. Alıntı:

All numbers in Javascript are 64bit (8 bytes) floating point numbers which yields an effective range of 5e-324 (negative) to 1.7976931348623157e+308 (positive) at the time this article was written (this may eventually change to 128 bits in the future as 64 bit processors become commonplace and the ECMA standards evolve).

Integers are considered reliable (numbers without a period or exponent notation) to 15 digits (9e15) 1. Floating point numbers are considered only as reliable as possible and no more! This is an especially important concept to understand for currency manipulation as 0.06 + 0.01 resolves to 0.06999999999999999 instead of 0.07.

, Özellikle IEEE 754 bölüm ve Temsil numaralarını Floating Point bir göz atın.

Bu davranış, C + + ve Kurul da dahil olmak üzere birçok programlama dilleri, çoğaltılamaz olabilir. Nedeni FPU tarafından kullanılarak nokta biçimi yüzer. Sen detaylarını buradan okuyabilirsiniz:

http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_14/CH14-1.html#HEADING1-19

Genel kural: Kayan nokta işlemlerinin kesin sonuç beklemek asla. Iki kayan noktalı sayıları, örneğin kullanım aralığı, karşılaştırmak asla: yerine (f2-e) ve f1> f1 kullanmak, f1 == f2 test < (F2 + e), e bazı küçük değerdir.