Javascript Decimal Matematiksel İşlem
-
antichrist bunu yazdı
Hocam javascript'de , ile sayı ayırma gibi bir notasyon yok o yüzden bence C#'da işlem yaparken CultureInfo kullanarak float değerlerde , yerine . kullanımını değiştirmen daha sağlıklı olur gibi geliyor. Javascript'de takla atmana da gerek kalmaz.
System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); customCulture.NumberFormat.NumberDecimalSeparator = "."; System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
Javascript'de , konmaması için de input type="number" olarak belirtirsen o input'a decimal ve int sayılar hariç girişi engelleyebilirsin.
hocam bu dediğiniz c# tarafı için sanırım
kullanıcı tarafında kullanıcı küsüratlı rakam girdiğinde bunu clientside tarafta ancak javascript ile çözmemiz gerekiyor.
-
baysevgi77 bunu yazdı
function TutarChange() { var x = document.getElementById("txtTutar"); var currentVal = x.value; document.getElementById("txtKalan").value = currentVal; }
function PesinatChange() { var Tutar = 0; var Pesinat = 0; var x = document.getElementById("txtTutar"); var y = document.getElementById("txtPesinat"); var Tutar = parseFloat(x.value.replace(",",".")); var Pesinat = parseFloat(y.value.replace(",",".")); var Kalan = Tutar - Pesinat; if (Kalan > -1) { var Kalan = Tutar - Pesinat; document.getElementById("txtKalan").value = Kalan.toFixed(2).replace(".",","); } else { alert('Alınan peşinat Tutardan büyük olamaz!') } }
-
Hocam inputa mask yap, belirlediğin format dışında değer girilmesin.
attıyorum input formatın 9999,9999 şeklinde olsun, parseFloattan önce virgülleri nokta ile değiştir.
parseFloatın decimal ayracı nokta;
Mask için
https://github.com/uNmAnNeR/imaskjs
-
baysevgi77 bunu yazdıbaysevgi77 bunu yazdı
function TutarChange() { var x = document.getElementById("txtTutar"); var currentVal = x.value; document.getElementById("txtKalan").value = currentVal; }
function PesinatChange() { var Tutar = 0; var Pesinat = 0; var x = document.getElementById("txtTutar"); var y = document.getElementById("txtPesinat"); var Tutar = parseFloat(x.value.replace(",",".")); var Pesinat = parseFloat(y.value.replace(",",".")); var Kalan = Tutar - Pesinat; if (Kalan > -1) { var Kalan = Tutar - Pesinat; document.getElementById("txtKalan").value = Kalan.toFixed(2).replace(".",","); } else { alert('Alınan peşinat Tutardan büyük olamaz!') } }
dostum azimle çalışan duvarı delermiş.
oldu :)
teşekkür ederim. -
Hocam gördüğüm kadari ile replace fonksionunu ters yapiyorsun.
var
Tutar = parseFloat(x.value.replaceAll(".",","));
var
Pesinat = parseFloat(y.value.replaceAll(".",","));
yerine
var
Tutar = parseFloat(x.value.replaceAll(",","."));
var
Pesinat = parseFloat(y.value.replaceAll(",","."));
olmasi gerekiyor.
Ben bu tarz işlemler için DecimalJs diye bir kütüphane kullanıyorum. bu sayede virgulden önce 64 hane, virgulden sonra 64 haneden 128 haneli sayılarda işlem yapabilmeni sağlıyor. Ayrica Fload gibi 1.1 ile 1.01 i topladiğinda 2.11000000006 gibi bir değer elde edebilirsin. (güvenli kabul edilmez) bunun gibi sorunlar yaşamamak için böyle DecimalJS BigNumberJs gibi kütüphaneler kullanmak zorunda kaliyoruz.
-
TheAvenqer bunu yazdı
Öncelik globalde küsürat ayracı . ile ifade edilir basamak ayracı , ile TR de ise tam tersi küsürat , basamak . olarak ifade ediliyor bundan dolayı
< id="tutar" ="text" placeholder="Tutar" /> < id="pesinat" ="text" placeholder="Peşinat" /> < id="kalan" ="text" placeholder="Kalan" />
thanks..