d программирование, анализ или преобразование строки в двойную

так же просто, как и на других языках, я не могу найти вариант на языке программирования d, где я могу преобразовать строку (например: «234,32») в двойное/плавающее/действительное.

использование atof из библиотеки std.c.stdio работает только тогда, когда я использую постоянную строку. (например: atof("234.32") работает, но atof(tokens[i]);, где токены представляют собой динамический массив со строками, не работает).

как преобразовать или разобрать строку в вещественное/двойное/число с плавающей запятой на языке d-программирования?


person Marnix v. R.    schedule 26.09.2012    source источник


Ответы (2)


Легкий.

import std.conv;
import std.stdio;    

void main() {
    float x = to!float("234.32");
    double y = to!double("234.32");

    writefln("And the float is: %f\nHey, we also got a double: %f", x, y);
}

std.conv - это швейцарский армейский нож преобразования в D. Это действительно впечатляет!

person dav1d    schedule 26.09.2012
comment
да, "to" чертовски круто! :) - person Trass3r; 27.09.2012

Чтобы преобразовать почти любой тип в любой другой, используйте std.conv.to. например

auto d = to!double("234.32");

or

auto str = to!string(234.32);

С другой стороны, если вы хотите проанализировать несколько значений, разделенных пробелами, из строки (удаляя значения из строки по мере продвижения), используйте std.conv.parse. например

auto str = "123 456.7 false";

auto i = parse!int(str);
str = str.stripLeft();
auto d = parse!double(str);
str = str.stripLeft();
auto b = parse!bool(str);

assert(i == 123);
assert(d == 456.7);
assert(b == false);
person Jonathan M Davis    schedule 26.09.2012