C++Builder 中使用 __int64 整数的问题

程序中用到一个大整数。存储在 MySQL 数据库那边用了 bigint 类型,程序运算过程中就有了点麻烦。integer用不了,只能用 __int64 这个数据类型。

麻烦一,从数据表取数据。以前在数据表取回整形数据时用的都是Query->FieldByName("data")->AsInteger这样的写法。现在数据超过integer的最大限度时,这个写法取回的数据是错误的。需要改成Query->FieldByName("data")->Value。

麻烦二,界面编辑输入数据。从界面编辑框取回的都是AnsiString类型数据,它的数据转换method有ToInt(),ToDouble()等。ToInt()显然不行,超宽之后转换结果全是错的。ToDouble()从字面理解,应该是转成double类型。根据资料,double类型的精度能达到十进制十五六位的样子,不能完整覆盖__int64的数据范围。于是写了几句程序,用来把AnsiString串转成__int64。
思路很简单,就是把字串从低位开始截成9位宽的片段,在integer的范围之内,使用ToInt()方法把每段转成整数,再乘以对应位的倍数。19位以上乘10的18次方,18到10位乘10的9次方,再把各段数据相加。写法要注意,直接数据的末尾要加上“i64”的修饰符。
但后来通过实际测试发现不用这么麻烦。看下面这几句。
__int64 a;
double b;
AnsiString str="12345678901234567890";
a=str.ToDouble();
b=str.ToDouble();
程序执行之后,变量a按64Bit精度保存了str的内容,变量b则按double的精度保存了数据。
于是,麻烦不再是麻烦,需要从AnsiString转换大整数时,直接ToDouble()就OK。

麻烦没了,却有了疑惑。这个ToDouble()是怎么工作的呢?根据联机文档的说明,ToDouble()返回值应该是double,为什么它可以返回整数呢?不得而知。

C++Builder 中使用 __int64 整数的问题

时间: 2024-07-29 17:59:05

C++Builder 中使用 __int64 整数的问题的相关文章

laravel的Eloquent中的get()和Query/Builder中的get()

Eloquent 中的get实际上是Eloquent/Builder中的get,得到的结果是个Collection对象,再调用Collection的first才得到collection中的一项,即一个Model对象. 而Query/Builder中的get得到的是个数组,实际上是直接执行了PDO的fetchAll的结果,这个结果不能再调用first,但是可以直接在Query/Builder上调用first,将得到一个stdClass对象. laravel的文档还是比较模糊的,很多地方都是简单的介

JavaScript中判断为整数的多种方式

原文:JavaScript中判断为整数的多种方式 之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(Integer). JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示.但实际操作中比如数组索引.位操作则是基于32位整数. 方式一.使用取余运算符判断 任何整数都会被1整除,即余数是0.利用这个规则来判断是否是整数. function isInteger(obj) { return obj%1 === 0 } isInteger(3

c语言:将数组中n个整数按相反顺序存放。

将数组中n个整数按相反顺序存放. 解:程序1: #include<stdio.h> int inv(int x[], int n) { int temp, i, j, m = (n - 1) / 2; for (i = 0; i <= m; i++) { j = n - 1 - i; temp = x[i]; x[i] = x[j]; x[j] = temp; } return; } int main() { int i, a[10] = { 1,2,3,4,5,6,7,8,9,10 }

Model Builder中Table2Table中字段映射的问题

ArcGIS10中使用过程中,Bug不少.尽管有了SP3,但模型耦合的深层次的应用中还是错误不少.目前只是遇到一个,利用躲避的方法解决一个.例如,从NetCDF中抽出的数据表,必须在内存和数据库中都存在的条件下,Python程序才能运行成功,花了许多时间才得出这样的躲避方法.如下图的抽取计算数据为例,抽出NetCDF的数据表为内存视图,将该内存视图转存为Geodatabase的存储数据表,在没有表映射的条件下总是无法输出字段. 这里实际上可能是ArcGIS10的Bug.如果在制作过程中有具体数据

正则表达式匹配字符串中是否的整数价格和小数价格

/**     * 匹配字符串中是否的整数价格和小数价格     * @param str     * @return     */    public static String Match_the_amount(String str) {        String pattern[] = {"[1-9]\\d*\\u5143|[1-9]\\d*.\\d*\\u5143|0.\\d*[1-9]\\d*\\u5143|"                + "[1-9]\\d

python基础知识 05 python语言中的大整数

第五课 python语言中的大整数 java中的int 最大可以处理 2^31 -1(2147483647) 最小呢-2^31 (-2147483647)但是在Java中可以使用BigInteger 来处理无线大的数 print(2 ** 60) 结果为 1152921504606846976 print(2 ** 600) 41495155688809929585124078636911611510124462322424368999956573296906528114129081463997

javascript中小数转换为整数

还是去年的时候有同事随口问我在javascript中怎么把小数转换成整数(去掉小数位),当时我回答直接用parseInt.其实那时候也没有仔细考虑这个问题还有没有其他的方法.不过最近在看别人一篇博文里的代码时,发现他这么写代码 var random = (Math.random() * 2) | 0; // get random 0 or 1 我们都知道javascript的Number其实就是双精度浮点数,而Math.random() * 2 很明显随即出来的是[0 ~ 2)之间的小数,他通过

在一个每一行从左到右递增每一列从上到下递增的二维数组中查找一个整数是否存在——3

给定一个二维数组,数组的特点是:每一行从左到右数据大小依次递增,每一列数据从上到下依次递增,要求判断一个整数是否在这个二维数组中: 设计二维数组如下: 首先,毋庸置疑的的是,遍历一遍数组肯定能判断出来,这也是最笨的方法了,因此,要想提高程序的运行效率就得找出一种高效的方法来查找: 一开始的想法大概都能想到从数组第一行第一列的数开始沿着对角线判断,如果是对角线数据就可以直接返回,比如我们要想查找17这个数,这时候17比0.9.16都要大,因此以0.9.16为对角线的矩形数据就可以排除了,接下来判断

python中两个整数相除得到浮点数的值的方法

/********************************************************************* * Author  : Samson * Date    : 09/19/2014 * Test platform: *              Linux ubuntu 3.2.0-58-generic-pae *              GNU bash, version 4.2.39 * *****************************