64位双精度可以精确地表示整数+/- 2 53
鉴于这一事实,我选择将double类型用作所有类型的单一类型,因为我的最大整数是无符号32位.
但现在我必须打印这些伪整数,但问题是它们也与实际双打混合在一起.
那么如何在Java中很好地打印这些双打?
我试过了String.format("%f", value),这很接近,除了我得到很多小值的尾随零.
这是一个示例输出 %f
232.00000000 0.18000000000 1237875192.0 4.5800000000 0.00000000 1.23450000
我想要的是:
232 0.18 1237875192 4.58 0 1.2345
当然,我可以编写一个函数来修剪这些零,但由于字符串操作,这会导致很多性能损失.我可以用其他格式代码做得更好吗?
编辑
Tom E.和Jeremy S.的答案是不可接受的,因为它们都可以任意舍入到小数点后两位.请在回答之前先了解问题.
编辑2
请注意,String.format(format, args...)是区域设置相关的(见下面的答案).
我实现MyInputStream.read()并注意到InterruptedException这个函数可能会发生.经过一番搜索后,我发现抓住InterruptedException并重新抛出一个InterruptedIOException类似于:
try {
...
} catch (InterruptedException e) {
//Thread.currentThread().interrupt(); // <=== ???
throw new InterruptedIOException();
}
Run Code Online (Sandbox Code Playgroud)
但只有大约50%的代码样本Thread.currentThread().interrupt().好吧,同意你可以做的最糟糕的事情InterruptedException是吞下它,但是我应该在抛出一个不同的异常之前重新中断当前的线程吗?
PRO:单个中断请求可能有多个"收件人".
CONTRA:在中断状态被清除之前,某些功能(如日志记录)可能无法正常工作,这可能会导致细微的错误.
CONTRA:我们得到两个关于中断请求的通知:线程的中断状态和异常.最初,只有一个通知:线程的中断状态为true或InterruptedException抛出,但不是两者都有.
PRO:没有人真正针对可能抛出的异常异常测试代码,并且与InterruptedIOException其他i/o异常不同; 一个catch(IOException)条款可以吞下被中断的状态.
PS它看起来像我做的任何事情,InterruptedIOException一个非常特殊的IOException需要特殊处理程序的问题将无法解决.
PPS(编辑)我不能让原始InterruptedException传播,因为InputStream.read()不能抛出InterruptedException(它throws IOException并没有抛出任何其他东西).我无法预测MyInputStream.read()将被调用的上下文:MyInputStream可以将实例传递给任何带InputStream参数的Java或第三方库函数.
对于旧的bug,看起来它只是关闭,而不是固定; 并且中断状态的想法是代码的行为会有所不同.
http://developer.android.com/guide/topics/text/creating-input-method.html#GeneralDesign上 写着:
由于可以在设备上安装多个IME,因此为用户提供了一种直接从输入法UI切换到不同IME的方法.
假设我有两个输入方法的源,可以修改它.我想让用户快速切换它们,并准备为此保留一个按钮.如何"直接从输入法UI切换到不同的IME"?
我有一个Android NDK项目,其NDK部分从命令行编译好; 我曾经没有将从Eclipse下编译的东西作为纯Java项目运行的问题.但我将它转换为C/C++项目,现在甚至无法运行它.
我在"控制台"中看到了库的构建,但是:Eclipse告诉我我的项目有错误而且不会运行它.(地球为什么?该代码被编译!)
我通过向项目属性添加包含路径来解决丢失符号的一些问题.
但我仍然得到这个奇怪的
Function '__android_log_print' could not be resolved
错误.
那么,有两个问题:
= = =
PS"你打电话给船,所以它会这样做".他们难道不能为IDE找到一个更好的名字,比如"Lucid编码"吗?(修辞问题)
= = =
更新:Eclipse看起来只报告它看到的文件的错误(即显示给你).我用LOGD宏打开了另一个文件,Eclipse也报告了它的错误.我关闭了所有文件窗口,关闭了Eclipse 并删除了一个.something文件.之后,我能够运行该应用程序.我没有冒险使用该日志记录宏打开源文件.(这与"清醒编码"相距甚远,不是吗?)
有一个非常简单的程序:
public class A {
public static void main(String[] p) {
final Runnable r = new Runnable() {
public void run() {
System.out.println(r);
}
};
r.run();
}
}
Run Code Online (Sandbox Code Playgroud)
这给了:
$ javac A.java
A.java:6: variable r might not have been initialized
System.out.println(r);
^
1 error
Run Code Online (Sandbox Code Playgroud)
(在实际代码中,还有一个级别(一个监听器),并且引用via this不起作用)
在实际项目中,我发现@Component以下代码中可能会省略:
// no @Component !!!!!
public class MovieRecommender {
private final CustomerPreference customerPreference;
@Autowired
public MovieRecommender(CustomerPreference customerPreference) {
this.customerPreference = customerPreference;
}
// ...
}
@Component
public class CustomerPreference {...}
Run Code Online (Sandbox Code Playgroud)
(该示例取自Spring官方文档https://docs.spring.io/spring-framework/docs/4.3.x/spring-framework-reference/htmlsingle/#beans-autowired-annotation,文档显示没有@Component根本没有,这可能意味着不需要它,或者只是没有显示。)
我工作的项目不使用任何 XML bean 声明,但它使用 Spring 以外的框架,因此可能有某些东西将类声明为 bean。或者它可能是我们使用的 Spring 版本的一个特性,如果该特性没有记录下来,它可能会在以后被删除。
问题:
使用的类必须用(好吧,是一个bean)@Autowired注释吗?@Component有相关的官方文档吗?
UPD伙计们,项目中没有@Configuration也没有 XML 配置,我知道这样的声明从类中创建了一个 bean,但问题不在于它们。我什至在上面的问题中写了“(好吧,做个豆子)”来涵盖这一点。是否@Autowired在不是 bean 的类中工作?或者也许它声明了将其用作 bean 的类?
https://docs.scala-lang.org/scala3/reference/metaprogramming/compiletime-ops.html上的 Scala 3 参考文献提到了 Scala 3 mataprogramming 可能实现的一些“类似 Prolog 的编程风格”:
到目前为止的问题是,类似于 Prolog 的隐式搜索编程风格变得病毒式传播:一旦某个构造依赖于隐式搜索,它就必须被编写为逻辑程序本身。
但它们都保留了基于逻辑编程的隐式搜索程序的病毒性。
我做了一些搜索,但只知道它在某种程度上滥用了 Scala 编译时行为,并且其中的某些内容类似于 Prolog。
什么是“类似 Prolog 的编程风格”以及它是如何工作的?什么类似于Prolog?它在 Scala 3 中有效吗?
我必须使用两个本地库:一个是我自己的,另一个是第三方.只要我在单独的项目中使用它们,一切都很好.但现在我得到了Exception Ljava/lang/UnsatisfiedLinkError.
我正在使用Eclipse.
我发现如果我将现有的库放在libs/armeabi中,Eclipse就会开始编译本机代码并且它会失败.如果我从命令行重建JNI部分,编译成功但第三方库消失.真的很蠢.
那么我如何告诉Eclipse使用现有的.so库以及必须构建的库?图书馆是独立的.
库定义了不透明的数据类型:
\n\nstruct OpaqueStruct;\nRun Code Online (Sandbox Code Playgroud)\n\n并且客户端代码必须获取并释放OpaqueStruct*. 我可以访问库源。
不幸的是,既不能存储该指针shared_ptr,也unique_ptr不能存储该指针,从而出现错误: invalid application of \xe2\x80\x98sizeof\xe2\x80\x99 to incomplete type。
我能想到的最好的办法就是从这篇文章中借用finally守卫 。
\n\n如何将 RAII 用于不透明结构指针?
\n我想比较两个Java类.
class ClassComparator implements Comparator<Class> {
@Override
public int compare(Class arg0, Class arg1) {
return ....;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以只比较类名,但我希望父类比从它们派生的类"更小".而且我希望这种不那么关系能够传递并适用于任何两个类.(老实说,在我真正的问题中,一个类总是另一个类的超类,但我想要一些通用案例代码,因为理论上这可以改变.)
也许这已经完成,有人可以共享代码片段?
我想到的是:如果没有一个类派生自另一个类,找到它们从共同祖先派生的两个超类,并比较它们的名字.(嗯,如果任何对象类比任何接口都大,它甚至可以支持接口.)