2016-10-21 18 views
1

基本的に、私は次のインターフェイスの機能を探しています:それのための文字列表現に二重に変換浮動小数点数をATSの文字列に変換する方法は?

fun double2string(x: double): string 

を。例えば、double2string(3.14)は "3.14"を返します。

+0

多分これが検索に関連している:https://github.com/githwxi/ATS-Postiats/blob/master/prelude/DATS/CODEGEN /tostring.atxtとhttps://github.com/githwxi/ATS-Postiats/commit/28b20bc1ec78e3cf70bd2ac7ca676867a75b8c32 – Hackerman

+0

tostring_double(または線形バージョンの場合はtostrptr_double)を試してください。 –

答えて

1

時々私は、次のチートを選択します。

#include "share/atspre_define.hats" 
#include "share/atspre_staload.hats" 

%{^ 
#include <assert.h> 

char *double2string(double x) { 
#define DECIMAL  8 
#define DECIMAL_FORMAT "%.8e" 
#define DECIMAL_LEN DECIMAL+2+5 
    char *s = malloc(DECIMAL_LEN+1); 
    assert(NULL != s); 
    memset(s, 0, DECIMAL_LEN+1); 

    snprintf(s, DECIMAL_LEN, DECIMAL_FORMAT, x); 
    return s; 
} 
%} 

extern fun double2string (x: double): strptr = "mac#" 

implement main0() = { 
    val s = double2string 1234567890.1234567890 
    val() = println! s 
    val() = free s 
} 
0

文字列を構築するためのATSLIBで名前atspre_string_make_snprintfの機能があります。たとえば、1は行うことができますどのようなatspre_string_make_snprintfによって返されることは解放することができ、線形文字列(StrPtrを)、である

#include 
"share/atspre_staload.hats" 

fun 
double2string(x: double): string = 
$extfcall 
(
    string, "atspre_string_make_snprintf", "%.8e", x 
) (* double2string *) 

implement 
main0() = 
println! ("Pi = ", double2string(3.1415926535)) 

を:

fun double2strptr(x: double): Strptr1 = $extfcall(...) 

コンパイルするときに、フラグを渡すことを忘れないでください-latslib 。あなたがオンラインでこの例を試すことができます。

https://glot.io/snippets/ejm6ous1fh

0

JavaScriptにコンパイルするため、「string」は、これを行うために呼び出すことができます。実際、 'String'は任意のオブジェクトを何らかの形式の文字列表現に変換します。ここで

0

はそれを行うための簡単な方法です:

fun 
double2string 
(
x0: double 
) : string = let 
    val i0 = g0float2int_double_int(x0) 
    val d0 = g0float2int_double_int(100000000 * (x0 - i0)) 
    val i0_rep = g0int2string(i0) 
    val d0_rep = g0int2string(d0) 
    val x0_rep = 
    string0_append3 
    ($UNSAFE.strptr2string(i0_rep), ".", $UNSAFE.strptr2string(d0_rep)) 
    // end of [val]                           
    val ((*freed*)) = strptr_free(i0_rep) 
    val ((*freed*)) = strptr_free(d0_rep) 
in 
    strptr2string(x0_rep) 
end // end of [double2string]  
関連する問題