[编辑]
此问题仅在RealmProxy类在Android Studio上的调试模式下未提供正确值时发生。阅读已接受的答案以获得良好实践。
[原始问题]
我有_allowedPercentageDiscount = 0.0
和perentageDiscount = 1.0
,首先我尝试了
if(_allowedPercentageDiscount < percentageDiscount)
//do something
我也试过
if (Float.floatToIntBits(_allowedPercentageDiscount) < Float.floatToIntBits(percentageDiscount)) {
//but it never works
}
但它永远不会成真。然后,经过一些搜索,我尝试了Float.compare
,但它仍然没有结果。奇怪的是,它在评估窗口中给出了正确的结果(Android Studio)。
到底出了什么问题,怎么办?
// =============== 的修改
评论中要求的完整代码信息: 我有一个Product类:
class Product{
public float _allowedPercentageDiscount, _discountPercentage;
public float setDiscountPercentage(float percentageDiscount) {
if (_allowedPercentageDiscount < percentageDiscount) {
percentageDiscount = _allowedPercentageDiscount;
} else if (percentageDiscount < 0)
percentageDiscount = 0;
return this._discountPercentage = percentageDiscount;
}
}
现在我在另一个类(Android Fragment
)的产品列表中调用此方法。但条件不起作用,并且对没有_allowedDiscountLimit
的所有产品设置折扣。使用Lightweight-Stream-API在Android中对java 6,7的流支持。
private void applyDiscountPercentage(int discountPercentage) {
Stream.of(cartProducts).forEach(product -> product.setDiscountPercentage(discountPercentage));
}
答案 0 :(得分:0)
写两个变量
float _allowedPercentageDiscount=(float) 0.0; // or 0.0f
float perentageDiscount = (float) 1.0; // or 1.0f
if(_allowedPercentageDiscount < perentageDiscount )
将返回true
但功能
Float.compare(f1,f2)
如果两个值相同,则此函数返回0,当f1小于f2时返回小于0的任何整数,并且当f1> f2时返回任何大于0的整数 所以在你的图像中返回-1因为_allowedPercentageDiscount
此链接中此功能的描述 https://docs.oracle.com/javase/7/docs/api/java/lang/Float.html#compare(float,%20float)
答案 1 :(得分:0)
问题不在于代码或浮点数,而在于Realm.io类在Android上的行为方式,尤其是在与零拷贝概念相关的调试模式中。在调试时,任何实现RealmModel
或RealmObject
的类都不会为您提供正确的变量值。这里提到Realm debugging and testing。
因此,在这个问题的情况下,例如,_allowedPercentageDiscount
的值为15,对于每个项目应该是不同的。错误地在逻辑中的其他位置分配的值15让我陷入需要对此值起作用的行。
<强>结果:强>
在计算和算法中使用Android上的Realm类进行调试时需要格外小心。由于在调试模式下无法看到realm对象的变量值,因此可以将这些类导出为普通模式在使用Realm.copyFromRealm()
进行调试/开发时。成功后,您可以使用RealmResults
进行效果和zero-copy领域实施。