Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Приведение Number в String без потерь (http://www.flasher.ru/forum/showthread.php?t=214718)

Dzzirtuoz 12.11.2017 06:37

Приведение Number в String без потерь
 
Есть такой код
Код AS3:

var num:Number = 0.940544481142550815427045414574;
var str:String = String(num);
trace(str);

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

illuzor 12.11.2017 07:39

А что выдаёт trace(num)?

Dzzirtuoz 12.11.2017 07:52

Цитата:

Сообщение от illuzor (Сообщение 1202880)
А что выдаёт 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*/

    }
}


undefined 12.11.2017 15:53

Цитата:

var num:Number = 0.940544481142550815427045414574;
а такое число получается в результате вычислений?

Dzzirtuoz 12.11.2017 15:56

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

undefined 12.11.2017 16:08

бр, так требовалось же Number в String перегнать.Если это и так стринг, не совсем понятно в чем, собственно, проблема.

Dzzirtuoz 12.11.2017 16:19

Видимо все-таки я вопрос неправильно понял. Изначально да, у нас Number. В том решении которое я привел, у нас этот Number разбивается на две половинки, т.е. две переменные Number, которые по отдельности успешно преобразовываются в String, а потом просто конкатенируются в один String, который мне и нужен.

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

undefined 12.11.2017 16:27

ну вот я и спрашиваю этот изначальный number в результате каких-то вычислений получается?Уж очень много в нем значащих цифр.
Цитата:

И да, trace(num) выводит число целиком, ни больше ни меньше, ровно то, что находится в num.
Не знаю как у вас, а у меня
Код AS3:

var num:Number = 0.940544481142550815427045414574;
trace(num);

выдает 0.9405444811425508 ни больше, ни меньше.Animate 2017

Dzzirtuoz 12.11.2017 16:37

Цитата:

Сообщение от undefined (Сообщение 1202890)
Не знаю как у вас, а у меня
Код AS3:

var num:Number = 0.940544481142550815427045414574;
trace(num);

выдает 0.9405444811425508 ни больше, ни меньше.Animate 2017

Проверил еще раз у себя, чтобы убедиться что у меня правильно выводит, а убедился, что выводит 0.9405444811425508. Хм, странно, почему это я в прошлый раз так уверенно сказал, что все правильно выводит.
Ну а так получается, что внутренняя реализация функции trace() применяет .toString() ко всем не строковым входным параметрам. А именно .toString() и обрезает число. IntellijIDEA 14

undefined 12.11.2017 16:43

скорее обрезание еще на этапе присвоения происходит т.к. число знаков выше машинной точности


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

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