将CURRENCY转换为long

时间:2011-08-01 21:27:48

标签: winapi automation currency long-integer

如何将CURRENCY类型转换为long类型?

我需要能够这样做,因为我想使用%d将CURRENCY类型的值放入sprintf中

我很难用这个,感谢帮助:)

3 个答案:

答案 0 :(得分:1)

我假设您想要将CURRENCY值转换为long。正如您在文档中看到的那样,货币只是一个64位整数,存储货币单位的1/10000。单位我指的是美元,英镑,欧元等。不是便士,美分等。您所要做的就是这样做:long value = (long)currency.int64。请注意,如果成员int64中的值大于LONG_MAX或小于LONG_MIN,则会出现截断错误。

为什么需要将值转换为long?你不能按原样使用CURRENCY联盟吗?

答案 1 :(得分:0)

如果货币是字符串,您可以使用

sscanf(currency, "%d", &myLong);

如果是任何其他基本数据类型,您可以只进行类型转换,例如

long myLong = (long)currency;

如果您有关于数据类型的更多信息,请将其编辑到您的帖子中。

答案 2 :(得分:0)

CURRENCY是一个在代码中某处定义的类(即它不是本机C ++类型)。

如果由其他人编写,您的类可能已经具有强制转换为int(或long)的能力。您可以尝试通过(1)读取头文件或(2)编译此

来解决这个问题
    CURRENCY mymoney;
    printf("%d",static_cast<long>(mymoney));

并查看编译器是否允许你逃避 - 如果确实如此,那么很可能已经为该类定义了一个强制转换运算符。

很多人不喜欢你在C ++代码中使用sprintf,但更喜欢使用流。如果是这样,可能会定义<<运算符 - 您可以尝试通过(1)读取包含文件或(2)编译此代码来确定

    CURRENCY mymoney;
    std::cout << mymoney << std:: endl;

如果不是,您可能必须编写代码来重载Currency类上的<<operator和/或long转换运算符,以返回流输出和转换为其他类型所需的值。