2009-02-10 11 views

risposta

3

Lo trasmettere a int ti aiuta? Il denaro è destinato ad avere le cifre decimali ...

DECLARE @test AS money 
SET @test = 3 
SELECT CAST(@test AS int), @test 
+0

Ciao Tina, Ora ho ottenuto la mia uscita prevista. grazie fantastico .. :-) –

3

Prima di tutto, non si dovrebbe mai usare il tipo di dati di denaro. Se fai dei calcoli otterrai risultati troncati. Eseguire il seguente per capire cosa intendo

DECLARE 
    @mon1 MONEY, 
    @mon2 MONEY, 
    @mon3 MONEY, 
    @mon4 MONEY, 
    @num1 DECIMAL(19,4), 
    @num2 DECIMAL(19,4), 
    @num3 DECIMAL(19,4), 
    @num4 DECIMAL(19,4) 

    SELECT 
    @mon1 = 100, @mon2 = 339, @mon3 = 10000, 
    @num1 = 100, @num2 = 339, @num3 = 10000 

    SET @mon4 = @mon1/@mon2*@mon3 
    SET @num4 = @num1/@num2*@num3 

    SELECT @mon4 AS moneyresult, 
    @num4 AS numericresult 

uscita: 2949,0000 2949,8525

Ora per rispondere alla tua domanda (era un po 'vago), il tipo di dati denaro ha sempre due posti dopo la virgola. Utilizzare il tipo di dati intero se non si desidera la parte frazionaria o la conversione in int.

Forse si desidera utilizzare il tipo di dati decimale o numerico?

+1

Microsoft Dynamics utilizza il tipo di dati monetari. L'ho visto oggi. –

+2

Quanto è valido davvero volere più $ 450,50 * $ 32,76, mi sono seduto qui per un po 'pensando a qualsiasi momento in cui vorrei effettivamente più valori di denaro insieme, o dividerli. Ho usato il tuo sql di esempio e ho cambiato */per usare + - e ho anche avvolto quelli in un * e/e i valori per ogni abbinamento. –

+0

Per i commenti dettagliati su questa risposta, vedere [questa risposta] (http://stackoverflow.com/questions/582797/should-you-choose-the-money-or-decimalx-y-datatypes-in-sql-server) –

0

Questo mi sembra un problema di formazione.
Per quanto riguarda il tipo di denaro di SQL Server 0 == 0.00

Se si sta tentando di visualizzare 0 in dire C# piuttosto che 0.00, è necessario convertirlo in una stringa e formattarlo come si desidera. (O troncare.)

24

conversioni di denaro a distanza normale preservare i singoli penny:

SELECT convert(varchar(30), moneyfield, 1) 

L'ultimo parametro decide che cosa il formato di output appare come:

0 (default) Nessun virgole ogni tre cifre per a sinistra del punto decimale e due cifre a destra del punto decimale; ad esempio, 4235.98.

1 virgola ogni tre cifre a sinistra del separatore decimale e due cifre a destra del separatore decimale; per esempio, 3.510.92.

2 Nessuna virgola ogni tre cifre a sinistra del separatore decimale e quattro cifre a destra del separatore decimale; ad esempio, 4235.9819.

Se si desidera troncare i penny, e contare in sterline, è possibile utilizzare l'arrotondamento al canile più vicino, piano al più basso tutta la libbra, o il soffitto per arrotondare i chili:

SELECT convert(int, round(moneyfield, 0)) 
SELECT convert(int, floor(moneyfield)) 
SELECT convert(int, ceiling(moneyfield)) 
+0

Funzionerà se si desidera scartare tutti i valori di penny e non solo quando è 0.00. Vedi la mia risposta per quello. –

0

Sembra nonostante le limitazioni intrinseche del tipo di dati in denaro, se lo stai già utilizzando (o lo hai ereditato come ho) la risposta alla tua domanda è, usa DECIMAL.

-1

si potrebbe usare sia

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2) 

o

SELECT CurrencyNoDecimals = '$'+ LEFT(CONVERT(varchar, @MoneyValue,1),  
     LEN (CONVERT(varchar, @MoneyValue,1)) - 2) 
0

Si può provare in questo modo:

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2) 
1

Ho trovato questo approach diretta e utile.

CONVERT (VARCHAR (10), convertire (denaro, fieldname)) AS PREZZO

0

ho avuto questo problema pure, ed è stato scattato per un po 'su di esso. Volevo visualizzare 0.00 come 0 e altrimenti mantenere il punto decimale. Di seguito non ha funzionato:

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), Amount, 1) ELSE Amount END 

Perché la colonna risultante è stata forzata per essere una colonna MONEY. Per risolverlo, di seguito ha lavorato

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), '0', 1) ELSE CONVERT (VARCHAR(30), Amount, 1) END 

Questo importava perché la mia colonna di destinazione finale era un VARCHAR (30), e consumatori di quella colonna sarebbe all'errore se una quantità è stato '0.00' invece di '0'.

Problemi correlati