Как я преобразовываю из типа данных money в SQL-сервере?

Первый импорт NumberFormat. Затем добавьте это:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

Это даст вам два десятичных знака и пометит знак доллара, если он имеет дело с валютой.

import java.text.NumberFormat;
public class Payroll 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
    int hoursWorked = 80;
    double hourlyPay = 15.52;

    double grossPay = hoursWorked * hourlyPay;
    NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

    System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
    }

}
20
задан Elijah 25 April 2009 в 14:27
поделиться

5 ответов

Нормальные денежные преобразования сохранят отдельные пенсы:

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

последний параметр решает то, на что похож выходной формат:

0 (значение по умолчанию) Никакие запятые каждые три цифры слева от десятичной точки и две цифры направо от десятичной точки; например, 4235.98.

1 Запятая каждые три цифры слева от десятичной точки и две цифры направо от десятичной точки; например, 3,510.92.

2 Никаких запятые каждые три цифры слева от десятичной точки и четыре цифры направо от десятичной точки; например, 4235.9819.

, Если Вы хотите усечь пенсы и количество в фунтах, можно использовать округление для ближайшего фунта, пол к самому низкому целому фунту или потолок для окружения фунтов:

SELECT convert(int, round(moneyfield, 0))
SELECT convert(int, floor(moneyfield))
SELECT convert(int, ceiling(moneyfield))
30
ответ дан 30 November 2019 в 00:09
поделиться

Был бы, бросая его к международной справке Вы? Деньги предназначены, чтобы иметь десятичные разряды...

DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test
3
ответ дан 30 November 2019 в 00:09
поделиться

В первую очередь, Вы никогда не должны использовать тип данных money. Если Вы сделаете какие-либо вычисления, то Вы получите усеченные результаты. Выполните следующее для наблюдения то, что я имею в виду

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

Вывод: 2949.0000 2949.8525

Теперь для ответа на вопрос (это было немного неопределенно) тип данных money всегда имеет два места после десятичной точки. Используйте целочисленный тип данных, если Вы не хотите дробной части или преобразовываете в интервал

, Возможно, Вы хотите использовать десятичный или числовой тип данных?

3
ответ дан 30 November 2019 в 00:09
поделиться

Это похоже на проблему форматирования мне.
Насколько денежный тип SQL Server затронут 0 == 0.00

, При попытке отобразиться 0 в, говорят, что c# скорее затем 0.00 необходимо преобразовать его в строку и отформатировать его, как Вы хотите. (или усеките его.)

0
ответ дан 30 November 2019 в 00:09
поделиться

Похоже, что, несмотря на внутренние ограничения денежных данных, если вы уже используете его (или унаследовали его, как у меня есть) Ответ на ваш вопрос, используют десятичное число.

0
ответ дан 30 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: