2011-11-17 2 views
3

Я пытаюсь использовать компонент COM для Windows в Ruby, который ожидает числа в одной точности.Ruby single precision number

В C# Я могу отличить число от двойной до одинарной точности, как это.

float mynumber = (float)2.0 

Как создать число точек с плавающей запятой с единственной точностью в Ruby?

+2

Как передать номер вашему COM-компоненту? В Ruby все поплавки хранятся в двойной точности. –

ответ

4

Ruby имеет только один класс поплавка и двойную точность. Я не работал с COM в ruby, но я ожидал бы, что интерфейс автоматически преобразует ruby ​​float в тот тип, который ему нужен. Вы пробовали просто пропустить нормальный рубиновый поплавок? Что происходит? Можете ли вы опубликовать пример кода, демонстрирующего проблему?

EDIT 1:

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

http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-pack

Try:

[2.0].pack "f" 
1

Ruby сам по себе не поддерживает одиночные прецизионные поплавки.

Вы можете использовать драгоценный камень float-formats для выполнения вычислений/преобразования в разных форматах float.

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