2016-06-12 7 views
0

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

+0

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

+0

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

+0

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

Antwort

1

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.

0

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.

0
<?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 halten
string number_format (float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = ",") 

number_format($yourVal, 4, '.', ''); // $thousands_sep = ''; 
+0

immer noch 55400 ist als 55.0000 – Khodadad

+0

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

+0

Ich löste es durch Erhöhen der Ziffern (10,4) bis (19,4) und weiß, dass es gut funktioniert. Trotzdem danke. – Khodadad

Verwandte Themen