因为在MS Access(是的:yikes!),Java和SQLite之间的各种浮动风格之间进行转换是非常令人沮丧的,所以我想将实数存储为SQLite中的int。是完成此任务的首选方式(伪代码):
//real r = 36.57
string realAsStr = r.ToString();
// realAsStr is now "36.57"
// strip out the decimal point so that realAsStr becomes "3657"
int strAsInt = (integer)realAsStr; // strAsInt is 3657
...或者像这样:
int realAsInt = r * 100; // r * 100 is 3657.0[0]; realAsInt = 3657
......还是像其他一样呢?
注意:在MS Access中存储为实际类型的这些val是货币值,存储为双精度。
答案 0 :(得分:1)
简单地将实际值乘以10 ^ x,其中x是逗号后相关数字的位数。
然后舍入或截断,并分配给int。
示例:
逗号后的3位数字与您的应用程序相关:
double doubleVal = 127.123;
int intVal = (int) doubleVal * 1E3; // 1E3 = 1* 10^3 = 1000.0;
// intVal now is 127123
回读时只需除以10 ^ x:
intVal = 127123; // from DB
double val = intVal / 1E3;
// val现在127.123;
答案 1 :(得分:0)
需要采取以下几个步骤:
0)将相关班级成员的数据类型更改为" long":
private long _cost;
private long _margin;
private long _listPrice;
1)当读取RESTful方法(json)返回的值时,将它们从double转换为long:
Double cost = jsonObj.getDouble("cost");
Double margin = jsonObj.getDouble("margin");
Double listPrice = jsonObj.getDouble("listPrice");
long costAsLong = Math.round(cost*100);
long marginAsLong = Math.round(margin*100);
long listPriceAsLong = Math.round(listPrice*100);
DeliveryItem delItem = new DeliveryItem();
. . .
delItem.set_cost(costAsLong);
delItem.set_margin(marginAsLong);
delItem.set_listPrice(listPriceAsLong);
. . .
2)显示值时,将其显示为货币。 IOW,存储为3657的内容将显示为$ 36.57
根据AlexWien的回答更新了以下模式:
final double FLOAT_TO_INT_FACTOR = 100.0;
. . .
int costAsInt = (int) Math.round(cost*FLOAT_TO_INT_FACTOR);
(类成员已从long更改为int)