请参阅下面的示例.
float maxFloat = float.MaxValue;
string s = maxFloat.ToString();
float result = float.Parse(s); // same with Convert.ToSingle(s);
bool mustEqual = (maxFloat == result);
// It returns FALSE, why?
Run Code Online (Sandbox Code Playgroud) 我有一个log4j2.xml文件,我配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="log-path">${sys:catalina.base}/logs</Property>
</Properties>
<Appenders>
<!-- console appender -->
<Console name="console-log" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1} - %msg%n"/>
</Console>
<!-- file appender -->
<RollingFile name="commons-log" fileName="${log-path}/commons.log"
filePattern="${log-path}/commons-%d{yyyy-MM-dd}.log">
<!-- log pattern -->
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
</PatternLayout>
<!-- set file size policy -->
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="5 MB" />
</Policies>
</RollingFile>
<RollingFile name="analytics-log" fileName="${log-path}/analytics.log"
filePattern="${log-path}/analytics-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile> …Run Code Online (Sandbox Code Playgroud) 如果数量很少那么它可以工作,但是数量越大那么它就错了.我的示例代码如下.
public void TestZZZZZZZZZ()
{
ulong val = ulong.MaxValue; // val = 18446744073709551615
string s = string.Format("{0}", val);
double d = Convert.ToDouble(s);
ulong result = ((ulong)d; // result = 0 <-- WRONG
Assert.AreEqual(val, result);
}
Run Code Online (Sandbox Code Playgroud)
一些测试数据结果:
我有什么不对吗?请帮忙.
谢谢!