我刚刚发现log4j在我的应用程序中将float作为指数(例如:2.2388E2)打印。我希望它将值显示为非指数。 (223.88)
案例发生在客户环境中,我能够模拟。在什么情况下会发生这件事?知道如何防止这种情况吗?
额外信息:信封文档是使用CXF生成的,如果它确实重要。
以下是我的单位案例:
@Test
public void testSomething()
{
ServiceEnvelopeDocument serviceEnvelopeDocument = ServiceEnvelopeDocument.Factory.newInstance();
ServiceEnvelope serviceEnvelope = serviceEnvelopeDocument.addNewServiceEnvelope();
ServiceBody serviceBody = serviceEnvelope.addNewServiceBody();
RsDetail rsDetails = serviceBody.addNewRsDetail();
float testFloat = 223.88f;
AuxiliaryAccountStaticBalanceDetail accountStaticBalance = rsDetails.addNewAuxiliaryAccountStaticBalanceDetail();
accountStaticBalance.setAccountBalance(testFloat);
logger.error(""+accountStaticBalance);
logger.error(serviceEnvelopeDocument.toString());
logger.error(String.valueOf(accountStaticBalance));
}`
上面源代码的输出:
2013-01-02 14:55:33.443 ERROR (main) AccountInquiryUtilTest: - <AccountBalance xmlns="http://schemas.ocbc.com/soa/emf/account/elements">223.88</AccountBalance>
2013-01-02 14:55:33.465 ERROR (main) AccountInquiryUtilTest: - <ServiceEnvelope xmlns="http://schemas.ocbc.com/soa/emf/common/envelope/" xmlns:cbs="http://schemas.ocbc.com/soa/emf/service/CBS-CustAccountInfo-I" xmlns:agg="http://schemas.ocbc.com/soa/emf/account/aggregates" xmlns:elem="http://schemas.ocbc.com/soa/emf/account/elements">
<ServiceBody>
<cbs:RsDetail>
<agg:HolderAccountTypeDetail/>
<agg:AuxiliaryAccountStaticBalanceDetail>
<elem:AccountBalance>223.88</elem:AccountBalance>
</agg:AuxiliaryAccountStaticBalanceDetail>
</cbs:RsDetail>
</ServiceBody>
</ServiceEnvelope>
2013-01-02 14:55:33.544 ERROR (main) AccountInquiryUtilTest: - <AccountBalance xmlns="http://schemas.ocbc.com/soa/emf/account/elements">223.88</AccountBalance>
客户环境中的输出:
<ns3:AccountBalance>2.2388E2</ns3:AccountBalance>
答案 0 :(得分:1)
您正在记录字符串余额,因此它不可能是log4j的错误:
logger.error(String.valueOf(accountStaticBalance))
现在String.valueOf()不是很灵活,你会想要使用其他东西,比如NumberFormat(或DecimalFormat)。以下是Float.toString()official rules的摘录,与String.valueOf(float)相同:
我不明白为什么这些规则会在不同的环境中产生不同的结果,所以也许你没有显示正确的代码。这些规则甚至不依赖于当前的语言环境。