我不明白为什么在这个 Java 问题中变量 result 的值是非零的

西班牙计算机科学

我有这个问题:

您认为执行以下 Java 代码段后变量 result 的值是多少?

int i = 1234567890;

float f = i;

int result = i - (int)f;

答案非零

请记住,我是 Java 的初学者,目前正在学习绝对的基础知识,坦率地说,我不明白为什么答案是非零的,以及每行代码的实际含义是什么?

罗勒酒

tl;博士

如果您想要小数的准确性,请使用BigDecimal类而不是float浮点类型。

浮点数不准确

float/Floatdouble/使用的浮点技术以Double 牺牲准确性换取执行速度。切勿在准确性很重要的地方使用这些类型,例如金钱。

因此,将整数转换为浮点数并再次返回可能不会产生相同的数字。

此行为并非特定于 Java。Java 实现了定义浮点算术行为电气工程标准任何支持标准浮点的编程语言都会出现同样的问题。

int i = 1234567890;                  // Create an integer number from literal input, and store as a primitive value in variable named `i`. 
float f = i ;                        // Convert the integer `int` primitive to a fractional number represented using floating-point technology as a primitive value in variable named `f`. 
int backAgain = (int)f ;             // Cast (convert) from a `float` type to a `int` type. Data-loss may be involved, as any fraction is truncated. 
int result = i - backAgain ;         // Subtract one `int` primitive from the other `int` primitive. Store the integer result in a primitive `int` variable.
boolean isZero = ( result == 0 ) ;   // Test if the result of our subtraction is zero. 

查看此代码在 IdeOne.com 上实时运行

i: 1234567890
f: 1.23456794E9
backAgain: 1234567936
result: -46
isZero: false

BigDecimal

如果您在处理小数时想要准确性而不是速度,请使用BigDecimalclass。

int i = 1234567890;
BigDecimal bd = new BigDecimal( i ) ;
int backAgain = bd.intValueExact() ;
int result = i - backAgain ;
boolean isZero = ( result == 0 ) ;

查看此代码在 IdeOne.com 上实时运行

isZero: true
i: 1234567890
bd: 1234567890
backAgain: 1234567890
result: 0
isZero: true

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我不明白为什么在这个给定的程序中 a 的值没有增加

我的变量被赋予空值,我不明白为什么

我不明白为什么这些变量具有这些值

我不明白的 Java 问题

为什么我的代码连续打印两次?我不明白这个问题

我有这个错误:无法读取null的属性“值”,我不明白为什么

我不明白这个JSON有什么问题

我不明白在此问题中字符串数组是如何受等号影响的(Java)

我是 Java 编程的新手,显然不明白我在这个项目中遇到的错误

Java - 递归就停止了,我不明白为什么

java.lang.Long 不能转换为 clojure.lang.IFn 我不明白为什么我收到这个

我是PHP的新手,我不明白为什么会收到这个未定义的变量错误

我不明白这个作曲家有什么问题需要

我不明白这个常见的java原理

为什么我的价值是零?不明白会发生什么

我不明白我们为什么以及如何向这个函数传递一些东西。选择器问题

我的变量没有除,我不明白为什么

我不明白为什么这是行不通的异常线程“main” java.util.InputMismatchException

Java / Android:我不明白为什么它比预期的要慢

Genome Processing Server-方法返回0,但我不明白为什么(java)

Java:我不明白为什么这不起作用

零钱使脚本挂起-不明白为什么

我不明白为什么这与空的PHP变量一起发生

(C# 'Random' 是一个命名空间,但用作变量)我不明白为什么

我不明白为什么使用动态挖出按顺序隐藏变量

编程新手,不明白为什么我无法打印此变量

我不明白我的程序有什么问题

我不明白为什么 setState 函数不能用于设置值

不明白 Java Scanner 对象在这个例子中是如何工作的(hasNextInt,next...?)