Du letar förmodligen efter FORMAT
eller ROUND
funktion:
Använder FORMAT()
, beroende på din lokal och dina specifika behov kanske du måste byta ut tusenavskiljaren :
mysql> SELECT FORMAT(9.755046187483832e17,0);
975,504,618,748,383,200
mysql> SELECT REPLACE(FORMAT(9.755046187483832e17,0), ',','');
975504618748383200
Å andra sidan, ROUND()
är en numerisk funktionen matar den bara ut siffror :
mysql> SELECT ROUND(9.755046187483832e17,0);
975504618748383200
Se http://sqlfiddle.com/#!2/d41d8/17614 för att du lekte med det.
EDIT: Som du märkte är de två sista siffrorna avrundade till 00 . Det beror på DOUBLE
precisionsgränser. Du måste komma ihåg den dubbeln är ungefärliga . Om du behöver exakta värden och/eller fler siffror än vad som är tillgängligt med 16-bitars precision dubbel, måste du förmodligen ändra kolumntypen till DECIMAL
. Som standard DECIMAL
har 10 siffror precision (10 bas 10 siffror). Du kan uttryckligen begära upp till 65 siffror.
Till exempel, om du behöver upp till 20 siffrors precision, skriver du något sånt:
CREATE TABLE tbl (myValue DECIMAL(20), ...
Se http://dev.mysql.com/ doc/refman/5.6/en/fixed-point-types.html
Observera dock att saker och ting inte är det så enkelt. Om du väljer decimalkolumnen kan den tyst konvertera den till dubbel (eller stor ?) förlorar därmed den extra precisionen. Du kanske måste gjuta till strängen uttryckligen för att bevara full precision. Det betyder att du kan behöva hantera det på applikationsnivå.
create table tbl (dblValue DOUBLE, decValue DECIMAL(20,0));
insert into tbl values (975504618748383289, 975504618748383289);
SELECT dblValue, decValue FROM tbl;
--> DBLVALUE DECVALUE
--> 975504618748383200 975504618748383200
SELECT CAST(dblValue AS CHAR), CAST(decValue AS CHAR) FROM tbl;
--> CAST(DBLVALUE AS CHAR) CAST(DECVALUE AS CHAR)
--> 9.755046187483832e17 975504618748383289
Se http://sqlfiddle.com/#!2/d5f58/2 för exempel.