2013-02-27 3 views
0

десятичной Я понимаю, что float and real are:Real и число с плавающей точкой длина и точность

типов данных Примерных нумеровать для использования с плавающей запятой числовых данными . Данные с плавающей точкой являются приблизительными; поэтому не все значения в диапазоне могут быть представлены точно.

Однако в следующем примере:

Q1: Почему 'поплавок()' (то есть, реальный) дает больше десятичные чем «поплавок () ' еще менее точный?

Q2: Как хранить @S в числовом поле как это без округления?

declare @s varchar(50) = '34.770438199999944' 
select convert(float(24), @s) real_, convert(float(53), @s) float_ 

Results (скобки, чтобы сделать дифф более ясным)

|    real_ |  float_ | 
------------------------------------ 
| 34.77043(9147949) | 34.77043(82) | 

ответ

0

Q1. это только проблема отображения, для других чисел это может быть иначе. Он будет круглый, где он будет лучше (он будет ближе к реальному приближению числа). Меньшая точность, потому что у нее меньше данных для хранения номера.

Q2. В mssql (поскольку тег указывает sql-server), вы можете сделать десятичное число, и вы сохраните номер без потери точности. Но количество, которое вы можете сохранить, ограничено.

+0

Можете ли вы объяснить «Меньше точности, потому что у него меньше данных для хранения номера в?»? это о плавании или реальном? – Kaf

+0

хорошо .. любое число с плавающей запятой или нет представлено на нескольких битах. Например, 1 байт = 8 бит. Он может содержать номера от 0 до 255 (2^8 номеров). Если вы перейдете к 2-байтовому номеру, у вас будет 2^16 и так далее. С плавающими точками рассуждения аналогичны, но там число не сохраняется как есть, а как 2 числа на самом деле: значимые цифры и показатель. С помощью этого 2 вы можете приблизиться к очень большому диапазону чисел. Теперь float и real представлены с различным количеством байтов. Float, который имеет более байт, чтобы хранить 2 числа в нем, может хранить данные гораздо точнее. –

Смежные вопросы