Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.11.2017, 06:37
Dzzirtuoz вне форума Посмотреть профиль Отправить личное сообщение для Dzzirtuoz Найти все сообщения от Dzzirtuoz
  № 1  
Ответить с цитированием
Dzzirtuoz

Регистрация: Apr 2014
Сообщений: 17
По умолчанию Приведение Number в String без потерь

Есть такой код
Код AS3:
var num:Number = 0.940544481142550815427045414574;
var str:String = String(num);
trace(str);
В консоль выводит: 0.9405444811425508
num.toString() работает точно также.
Мне это категорически не подходит.
Как мне преобразовать Number в String, чтобы в итоге получилась строка: '0.940544481142550815427045414574' ?

Старый 12.11.2017, 07:39
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 2  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
А что выдаёт trace(num)?

Старый 12.11.2017, 07:52
Dzzirtuoz вне форума Посмотреть профиль Отправить личное сообщение для Dzzirtuoz Найти все сообщения от Dzzirtuoz
  № 3  
Ответить с цитированием
Dzzirtuoz

Регистрация: Apr 2014
Сообщений: 17
Цитата:
Сообщение от illuzor Посмотреть сообщение
А что выдаёт trace(num)?
Блин, вроде и понимал, что может возникнуть у кого-то такой вопрос, но почему-то не стал заранее говорить, что мне категорически нужна именно строка(мне её нужно хешировать). И да, trace(num) выводит число целиком, ни больше ни меньше, ровно то, что находится в num. Ну и добавлю, на всякий случай: напрямую создавать строку тоже не могу, нужно именно преобразовывать из Number.

Добавлено через 7 часов 39 минут
Решение нашел в таком виде. Правильность хеширования можно проверить в интернете. Для моей задачи подходит, вот и хорошо. Хотя тут же на ум приходит более "изящное" решение, которое впрочем выкладывать незачем.
Код AS3:
public class Main extends Sprite {
    private var num1:Number = 0.0000000000000000;
    private var num2:Number = 00000000000001;
 
    public function Main() {
        init();
    }
 
    private function init():void {
        var str1:String = String(num1);
        var str2:String = String(num2);
        trace(str1+str2 + ' ' + SHA224.hash(str1+str2));
 
        /*Хэш раунда: 96908a81bb4f80d71925f40c05d741c8e0849dddb500c135fd46d885cd8de8b2
        Число раунда: 0.940544481142550815427045414574*/
    }
}

Старый 12.11.2017, 15:53
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 4  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,269
Цитата:
var num:Number = 0.940544481142550815427045414574;
а такое число получается в результате вычислений?

Старый 12.11.2017, 15:56
Dzzirtuoz вне форума Посмотреть профиль Отправить личное сообщение для Dzzirtuoz Найти все сообщения от Dzzirtuoz
  № 5  
Ответить с цитированием
Dzzirtuoz

Регистрация: Apr 2014
Сообщений: 17
В результате вычислений вообще никакое число не получается, потому что вычисления мне выводят строку с данным числом, в чем и заключалась задача. Или я неправильно понял вопрос.

Старый 12.11.2017, 16:08
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 6  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,269
бр, так требовалось же Number в String перегнать.Если это и так стринг, не совсем понятно в чем, собственно, проблема.


Последний раз редактировалось undefined; 12.11.2017 в 16:18.
Старый 12.11.2017, 16:19
Dzzirtuoz вне форума Посмотреть профиль Отправить личное сообщение для Dzzirtuoz Найти все сообщения от Dzzirtuoz
  № 7  
Ответить с цитированием
Dzzirtuoz

Регистрация: Apr 2014
Сообщений: 17
Видимо все-таки я вопрос неправильно понял. Изначально да, у нас Number. В том решении которое я привел, у нас этот Number разбивается на две половинки, т.е. две переменные Number, которые по отдельности успешно преобразовываются в String, а потом просто конкатенируются в один String, который мне и нужен.

Добавлено через 4 минуты
А, понял теперь изначальный вопрос. Суть глобальной задачи в том, что мне нужно создать огромную базу данных со всеми хэшами строковых чисел от 0.000000000000000000000000000000 до 0.999999999999999999999999999999
Число 0.940544481142550815427045414574 я взял как для примера, который в самом начале мне не удавалось преобразовать в строку.

Старый 12.11.2017, 16:27
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 8  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,269
ну вот я и спрашиваю этот изначальный number в результате каких-то вычислений получается?Уж очень много в нем значащих цифр.
Цитата:
И да, trace(num) выводит число целиком, ни больше ни меньше, ровно то, что находится в num.
Не знаю как у вас, а у меня
Код AS3:
var num:Number = 0.940544481142550815427045414574;
trace(num);
выдает 0.9405444811425508 ни больше, ни меньше.Animate 2017

Старый 12.11.2017, 16:37
Dzzirtuoz вне форума Посмотреть профиль Отправить личное сообщение для Dzzirtuoz Найти все сообщения от Dzzirtuoz
  № 9  
Ответить с цитированием
Dzzirtuoz

Регистрация: Apr 2014
Сообщений: 17
Цитата:
Сообщение от undefined Посмотреть сообщение
Не знаю как у вас, а у меня
Код AS3:
var num:Number = 0.940544481142550815427045414574;
trace(num);
выдает 0.9405444811425508 ни больше, ни меньше.Animate 2017
Проверил еще раз у себя, чтобы убедиться что у меня правильно выводит, а убедился, что выводит 0.9405444811425508. Хм, странно, почему это я в прошлый раз так уверенно сказал, что все правильно выводит.
Ну а так получается, что внутренняя реализация функции trace() применяет .toString() ко всем не строковым входным параметрам. А именно .toString() и обрезает число. IntellijIDEA 14

Старый 12.11.2017, 16:43
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 10  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,269
скорее обрезание еще на этапе присвоения происходит т.к. число знаков выше машинной точности

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:10.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.