2010-08-04 2 views
2

Когда я вставляю 78.9 в Mysql (используя JDBC), он округляется до 79? Это нормально ... если так, как я могу остановить это.Когда я вставляю 78.9 в Mysql (используя JDBC), он округляется до 79? Это нормально

Подробнее:

Имя столбца: num Тип данных: decimal(12,0) * Выше был скопирован из PhpMyAdmin

Запрос является

stmt.executeUpdate("INSERT INTO triples(sub_id, pro_id, num) VALUES("+subId+","+proId+",78.9)"); 

В идеале я хотел бы использовать переменную жесткого кодирования 78,9

Такие, как

 BigDecimal obj = new BigDecimal(78.9); 
+4

В какие поля? –

+0

Показать код, определение столбца и т. Д. –

+0

Какой тип поля базы данных есть и как вы вводите его в JDBC? –

ответ

1

Вы должны установить тип данных столбца вы вставляете в качестве

float(x,y) 

или

decimal(x,y) 

где х представляет собой общее количество цифр и у есть общее число десятичных знаков.

e.g. float(5,2) -> 325.46 
    decimal(10,5) -> 42579.12345 
+2

Decimal отлично подходит для этого, когда задана правильная точность. Во многих случаях это предпочтительнее, чем float. –

+0

Я выбрал ваш ответ, потому что, хотя вы упомянули float - сначала он указал на главную проблему. Я уверен, что если бы я включил редактирование об использовании десятичного типа с самого начала, вы бы отразили это в своем ответе. Благодарю. – Ankur

5

Это нормально, потому что с помощью 0 в десятичной системе счисления (12, 0), по существу, говорит, что не должно быть ничего после запятой, поэтому он округляет. Вам нужно указать масштаб, чтобы получить то, что вы ищете. Например, десятичная (12,5) разрешила бы 7 чисел слева от десятичной и пять вправо.

 
The declaration syntax for a DECIMAL column is DECIMAL(M,D). 
The ranges of values for the arguments in MySQL 5.1 are as follows: 

M is the maximum number of digits (the precision). 
It has a range of 1 to 65. (Older versions of MySQL permitted a range of 1 to 254.) 

D is the number of digits to the right of the decimal point (the scale). 
It has a range of 0 to 30 and must be no larger than M. 

См: http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html