Первый импорт 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));
}
}
Нормальные денежные преобразования сохранят отдельные пенсы:
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))
Был бы, бросая его к международной справке Вы? Деньги предназначены, чтобы иметь десятичные разряды...
DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test
В первую очередь, Вы никогда не должны использовать тип данных 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 всегда имеет два места после десятичной точки. Используйте целочисленный тип данных, если Вы не хотите дробной части или преобразовываете в интервал
, Возможно, Вы хотите использовать десятичный или числовой тип данных?
Это похоже на проблему форматирования мне.
Насколько денежный тип SQL Server затронут 0 == 0.00
, При попытке отобразиться 0 в, говорят, что c# скорее затем 0.00 необходимо преобразовать его в строку и отформатировать его, как Вы хотите. (или усеките его.)
Похоже, что, несмотря на внутренние ограничения денежных данных, если вы уже используете его (или унаследовали его, как у меня есть) Ответ на ваш вопрос, используют десятичное число.