olsun. Gerçek koduma yazdırdığımdan dolayı, eğer mümkünse println içinde yayınlamayı tercih ederim.Scala iki tamsayı bölün ve bir şamandıra bir sonuç
cevap
Bu yardımlardan herhangi biri?
println(3.0/4.0)
println(3.toDouble/4.toDouble)
numarayı yazarak ediyorsanız, sadece bir float olarak bunlardan en az birini yazın (Sana Float
değil Double
demek varsayalım):
println(3f/4)
Zaten değişkenlerde sayıları varsa en azından varsa, her durumda (toFloat
val x = 3
println(x.toFloat/4)
ile bunlardan en az birini dönüştürmek, derleyicidiğer dönüştürürile eşleşiyor.)
İlkel türler (Int, Float, Double vb.) Için Scala, Java'daki kuralları izler.
Tamsayılar 3, 4, vb. Yazarsanız, ifadeleri tamsayı olarak kalır. Sonuç bir tamsayıdır böylece Yani
println(3/4)
iki tamsayılar oluşan bir ifade vardır: değerlerden herhangi yerine Int bir Float olması durumda 0.
, tüm ifade bir olmayı genişler Float. Aynı şey bir Double için de geçerlidir. Bu genişleme neredeyse tamamen otomatik olarak gerçekleşir - sadece derleyiciye istediğin şeyin ipucunu vermelisin, ör.
println(3f/4)
Float için genişler ve
println(3.0/4)
Çift için genişler.
Bu dil özelliklerini gerçek programlarda kullanırken, her zaman ortaya çıkabilecek hassasiyet kaybını düşünün. Bu durumda ondalık kesir kaybına neden olan tamsayı bölümünü zaten fark ettiniz. Ama burada gösterilmektedir kayan nokta için farklı bir vaka var:
gerçek sonuç tutun böylece mümkün değildir ikili kesirler, ondalık kesirler değil ve sahip bir ikili gösterimi (IEEE-754 standardını kullanarak) tutulurprintln(4f/3)
4f/3 küçük bir hata olmadan.
scala> println(100f/99f * 99)
99.99999
100 yazdırmayı bekleyebilirsiniz. Bazen bu önemli değil ve bazen de oluyor. Parasal değerlerle uğraşırken çok önemli olan çok yaygın bir durumdur. Başparmak kuralı DAİMA KAÇININ KAÇIRILMASI ve para için iki katıdır: yerine BigDecimal kullanın ya da sadece uzun bir peni olarak tutmayın ya da bazen Dizeler'e başvurun (BigDecimal ile birlikte güzel bir şekilde oynayın. yön).
Muhtemelen bir float yerine bir çift kullanmak istersiniz. –