小编Yal*_*eee的帖子

为什么lua_tonumber()在处理大整数时与lua_tointeger()有不同的行为?

我试图将Lua(5.1.5)中的字符串转换为整数,并检查该数字是否为有效整数(0~99999).但是,我发现lua_tonumber()在处理大整数时与lua_tointeger()有不同的行为.

int main()
{
    int in;
    double db;

    lua_State* Lua = luaL_newstate();
    luaL_openlibs(Lua);

    lua_pushstring(Lua, "213232127162767162736718238168263816873");
    db = lua_tonumber(Lua, -1);
    in = lua_tointeger(Lua, -1);
    printf("DOUBLE:%f\n", db); // DOUBLE:213232127162767176000119210017101447168.000000
    printf("INT:%d\n", in);    // INT:0
};
Run Code Online (Sandbox Code Playgroud)

如果我使用lua_tointeger(),它将返回0并将通过我的检查.

我检查了两个API描述,但我仍然不知道为什么他们有不同的行为.这些行为是否与机器无关?使用lua_tonumber()更好的方法吗?

我可以使用以下代码检查结果吗?(跨平台)

if (!lua_isnumber(Lua, -1)) { //error }
result = lua_tonumber(Lua, -1);
if (result < 0 || result > 99999) { // error2 }
// pass
Run Code Online (Sandbox Code Playgroud)

c lua

6
推荐指数
1
解决办法
3227
查看次数

C从日期开始获取日期

我想将日期为2013年1月31日的日期转换为年中的日期(本例中为31日).此日期来自用户输入,因此我还需要检查它是否是有效日期.我知道我可以自己计算一年中的一天,如下所示:

int get_yday(int mon, int day, int year)
{
    int yday=0;
    mon--;

    switch (mon){
    case 12:
        yday+=31;
    case 11:
        yday+=30;
    ....
    case 2:
        if (is_leap_year(year)) yday+=29;
        else yday+=28;
    .....
Run Code Online (Sandbox Code Playgroud)

但是,这意味着我需要自己检查用户输入

switch(month){
case 1:
    if (day > 31 || day < 0) {...}
case 2:
    if (...check leap year and day ...) {...}
Run Code Online (Sandbox Code Playgroud)

C中是否有内置的API可以轻松获取日期?

我有一个解决方案,但我想知道是否有更好的解决方案:

1. creating a tm struct of 01/31/2013 00:00:00
2. get timestamp by mktime()
3. convert timestamp to struct tm by localtime()
4. get tm_yday from tm …
Run Code Online (Sandbox Code Playgroud)

c date

3
推荐指数
1
解决办法
5347
查看次数

标签 统计

c ×2

date ×1

lua ×1