2012-04-27 6 views
1

R15b на Windows, дает:Erlang поплавки и TRUNC

>trunc(1.9999999999999999999). 
2 

Для этого вопроса, просто набрав поплавок возвращается:

> 1.9999999999999999999.    
2.0 

AFAIK, функция усечения должна просто отбросить дробную часть (по крайней мере, во всяком случае, это то, что мне нужно). Функция пола также может сделать трюк AFAIK, но реализации на полу, которые я видел, выкладывали онлайн-использование ... вы догадались ... trunc.

Я не занимаюсь этим, мне действительно нужно, чтобы это было правильно для программы, которую я разрабатываю.

Любые идеи по этому вопросу?

Спасибо.

+5

Если вам нужны цифры, чтобы быть «правильными», не следует использовать с плавающей точкой. – geoffspear

+0

Не полезно: 1) Это даже не пытается ответить на мой вопрос. 2) На самом деле, моя потребность в truncate - попытка уйти от поплавков и работать с прямыми целыми числами. –

+4

Вот почему я не опубликовал его в качестве ответа. Ваша проблема в том, что реализация с плавающей запятой, совместимая с IEEE, не может представлять число 1.9999999999999999999 в двоичном формате как что-либо, кроме 2.0. – geoffspear

ответ

0

Ваша проблема в десятичных числах представлена ​​как двоичное представление, совместимое с IEEE (32, 64 или 128 бит).

Если вам действительно нужна точность, вы должны использовать другие числовые структуры данных как Binary Coded Decimal или fixed-point arithmetic.

Надеюсь, это поможет!

0

, если вы хотите сделать TRUNC плавать, может быть, это один может помочь:

select substring (convert(varchar(14), CAST (20160303013458 as varchar(14))) , 1 , 8) 
+0

Вопрос в том, что касается Эрланг, а не SQL, поэтому он совершенно не связан. – Pyves

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