Просмотр полной версии : Количество знаков в числах.
Fogflasher
12.04.2013, 12:56
Всем привет. Еще парочка (вероятно весьма дурацких) нуб-вопросов:
1. Есть ли стандартная функция определяющая количество знаков в переменной int или Number?
Ну то есть, если это 15, то она должна выдавать 2. А для 2.5863 - соотвественно 6.
Можно конешно попробовать превращать числа в строки, а потом считать их длину, например так:
var k_val:Number = 5.12345;
var k_str:String;
var k_len:uint;
k_str = String(k_val);
k_len = // ??? А как определить длину строковой переменной?
//Можно конешно засунуть её в TextField и потом k_len = TextFiled.length; но... избыточность.
2. Есть ли стандартная функция, определяющая количество целых и дробных знаков в числе?
Можно конешно опять извращаться с переводом чисел в строку, и потом засекать где точка, и потом...
Но наверняка же должно быть нечто простое и стандартное для этих целей.
??? А как определить длину строковой переменной, если она не TextField?Неожиданно, конечно, но у String всего одно свойство — length (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/String.html#length).
А для 2.5863 - соотвественно 6.
Это не соответственно. В этом числе примерно 15-18 знаков. Читать здесь (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). А то, что выводится, округляется до определенной велчины в момент вывода. Поэтому без контекста округления говорить о "длине числа" неуместно. Так что либо у вас уже известно, до скольки нужно округлять (и тогда вопрос сводится к целой части числа), либо нужно округлять и смотреть, что получилось.
В простейших случаях может помочь Math.log, но не факт, что ручное деление и вычисление количества раз не будет быстрее (для целых чисел, для number самое быстрое через Math.log будет считать количество цифр в целой части).
Fogflasher
12.04.2013, 14:00
Wolsh, кхм... нда, это было неожиданно : ))))
Просто, я как бы не подозревал, что у типов данных тоже могут быть свойства и методы.
Добавлено через 4 минуты
maxkar, значит нужно окрулять... ясно, учтем.
По ссылке мат-часть весьма устрашающая, внушает.
нда, это было неожиданно : ))))В свое время я испытал похожий шок, узнав что length есть у дисплейного объекта TextField. В мою логику вот это не умещается..
length - серьезно у TF ? первый раз слышу! Может быть tf.text.length имеется ввиду? Если нет - то что оно дает?
chamele0n
12.04.2013, 16:36
это что домашка по информатике ?
интересно с какой целью нужно определять кол-во знаков ? )
Fogflasher
15.04.2013, 09:21
in4core, насколько я понимаю:
length : int
[read-only] The number of characters in a text field.
chamele0n, а цель весьма примитивна, нужно проставлять паддинг нули в счетчике.
Ну то есть 1 или 5 заменять на 01 и на 05 соотвественно.
Ну, плюс патч универсальности: заменять также 99 на 099, например, и т.п.
Наверное это можно сделать другими средствами, но хрен его знает как еще, не зная длины?
Может быть есть какие-то стандартные хреновины для padding нулей, но врядли.
cleptoman
15.04.2013, 10:31
как то не совсем понятна задача...как соотносится дробное число и счетчик с циферками?..т.е. к чему там нулики дорисовывать?
caseyryan
15.04.2013, 10:37
Просто, я как бы не подозревал, что у типов данных тоже могут быть свойства и методы.
А типы данных это что?
И здесь не у типа данных свойство, а у экземпляра с типом данных String
Тут сразу появляется множество проблем: числа с плавающей запятой не могут "хорошо" представить очень много десятичных дробей. "Хорошо" значит, что 0.2 будет на самом деле 0.19999999999 - или как-то так. Опять же, в числах с плавающей запятой есть такие константы как Infinity - сколько знаков в нем? (по соглашению, Infinity = 1e200 если не ошибаюсь, но что это нам дает?).
В ANSI CL есть похожая функция, но она только для целых, и считает не десятичные знаки, а биты - в таком контексте она имеет значение. Количество десятичных символов может иметь значение, если вы пытаетесь распечатать числа "красиво", но, как правило, вопрос стоит по-другому: как вписать имеющееся число в отведенное для него место с минимальной потерей точности.
Есть еще такой момент: а что если число представлено в научной записи (с экспонентой в степени Х)? - что в вашем понимании является знаками числа?
Но, предположим, вы хотите посчитать знаки числа с определенной точностью и не опираясь на конвенции представления чисел в выбраном окружении, тогда можно было бы сделать следующее:
Выбрать значение максимальной погрешности epsilon, и делить число на 10, пока результат от деления не будет меньше epsilon - вот сколько раз поделили - столько знаков в числе и есть.
Да лидинг то просто делается
while(str.length < digits) str = "0" + str;
или, если нужное количество знаков постоянно и известно заранее, то
str = ("000000" + str).substr(-6);
Fogflasher
15.04.2013, 14:18
А типы данных это что?
Что-то внушающее баттхерт абстрактного.
Понятно, что это "наверное тоже какой-то класс", но...
wvxvw, Выбрать значение максимальной погрешности epsilon, и делить число на 10, пока результат от деления не будет меньше epsilon - вот сколько раз поделили - столько знаков в числе и есть.
В целом идея понятна. О практической реализации пока стоит помолчать.
Wolsh, спасибо, пробую понять как эти строки работают.
Навскидку:
В первом случае не совсем понятно что такое digits, и если это переменная то как задается ранее.
Во втором случае... не совсем очевиден финт с -6... Если например у нас str = 5483, то str => 0000005483 (и считем с конца 6 знаков, получим) => 005483, как-то так походу.
или, если нужное количество знаков постоянно и известно заранее, то
str = ("000000" + str).substr(-6);Да необязательно знать заранее. Строчка с нулями может быть сразу большой длины. Сделай 15 штук нулей, это уже триллион - думаю хватит в 99,99%
Sintesis
15.04.2013, 14:53
Просто, я как бы не подозревал, что у типов данных тоже могут быть свойства и методы.
Тип это и есть класс.
В первом случае не совсем понятно что такое digits, и если это переменная то как задается ранее.Количество знаков, которого нужно достичь, дописывая лидирующие нули. Переменная, да. То же, что во втором примере 6.
получим) => 005483, как-то так походуВ этом смысл лидирующих нулей. Нет? Если нужно один ноль дописать, то в чем вообще проблема?
Fogflasher
15.04.2013, 15:40
Да нет, это просто размышления вслух были. Конешно, именно это и нужно.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.