Ich habe Integer für Preisfeld in der Datenbank verwendet, wenn ich 28.8808 in dem Feld speichern es gerundet und Präzision skaliert (28.8808 = 29) Wie behalte ich die 2 oder 4 Dezimalpunkte. ohne dezimalen Datentyp. dankWie Integer für Geld-Feld in der Datenbank verwenden
Antwort
Wenn Sie Präzision wie das brauchen: 1,23 Sie Ihre Preise so sparen können:
UPDATE prices SET price = (1.23*100) WHERE priceid = X;
und lesen Preise sth wie folgt aus:
SELECT ROUND(price/100,2) FROM prices WHERE priceid = X ;
Wenn Sie eine bessere Präzision benötigen Sie müssen multiplizieren 100 von 10.
Dies ist mein Code:
$getRate = DB::table('currency_rates')
->select('crt_id','buy_rate')
->orderBy('created_at','desc')->first();
$rate = $getRate->buy_rate;
$c_price = $unit_price*$rate;
$expense->c_price = number_format($c_price, 4);
$expense->c_total = number_format($quantity*$c_price, 4);
$expense->rate_id = $getRate->crt_id;
c_price und c_total werden nicht wie erwartet gespeichert, wird geändert.
<?php
$c_prices = ['55400', '55.400', '55 400', '55,400'];
foreach($c_prices as $c_price)
print (string)$c_price . ' => ' . number_format((float)$c_price, 4) . PHP_EOL;
druckt:
55400 => 55,400.0000 [!!!] 55400
55.400 => 55.4000 [OK] 55.4
55 400 => 55.0000 [!!!] 55.0
55,400 => 55.0000 [!!!] 55.0
, wenn Sie 55400 als 55400,0000 statt 55,400.0000 drucken möchten Sie Ihren Code ändern sollte:
den ganzzahligen und Bruchteile würden haltenstring number_format (float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = ",")
number_format($yourVal, 4, '.', ''); // $thousands_sep = '';
immer noch 55400 ist als 55.0000 – Khodadad
gespeichert Bitte teilen Sie 1. Ihre einfügen/update code; 2. Abfrageergebnis (von mysqlclient, phpmyadmin): zuerst: SHOW CREATE TABLE currency_rates; und zweitens: SELECT * FROM currency_rates ORDER BY created_at DESC LIMIT 1; – PawelN
Ich löste es durch Erhöhen der Ziffern (10,4) bis (19,4) und weiß, dass es gut funktioniert. Trotzdem danke. – Khodadad
Ein Weg, in zwei verschiedenen Feldern, wenn Sie den Datentyp 'DECIMAL' nicht verwenden möchten. Aber neugieriger Verstand möchte wissen, warum Sie nicht 'DECIMAL' Datentyp verwenden möchten? – 1000111
Da Berechnungen, ich verwendet Dezimal, aber beim Einfügen in der Datenbank wurde geändert, das Format, das ich angegeben wurde, war (10,4) und beim Einfügen 55400 wurde es als 55.0000 – Khodadad
Ich denke, es ist ein Problem mit Ihrem Integer Format Nummer (in Ihr Python/PHP/... Code). Ich denke, Sie generieren Abfrage wo der Preis 55,400 oder 55,400 ist. Richtige Version für 55400 sollte 55400 sein :). – PawelN