这个问题既不是笑话也不是垃圾邮件。在HP OfficeJet Pro 8600上打印后,我们注意到了Math.Round的奇怪行为。这在.net 2.0和.net 4.0中都可以看到。
此代码可以重现此问题。
double test = 1265.26777777;
MessageBox.Show("decimal : "+Math.Round(Convert.ToDecimal(test),2).ToString()+
" -- "+"double : "+Math.Round(test,2).ToString());
显示的结果是1265.27-1265.27 - >行
我们将一些副本打印到HP打印机(2或3个打印作业)
结果现在是1265.27 - 1265.26
这个1美分的差异可以用任何测试值复制。
有人对这种行为有一个合理解释的开始吗?
提前感谢您的帮助。
致以最诚挚的问候,
盖
答案 0 :(得分:4)
以下是解决方案:
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int _fpreset();
并在打印后调用_fpreset()解决了这个问题。
Hans Passant:这将重置浮点处理器。
这是正确的方法!有关_fpreset的信息,请参阅here。
感谢大家的成功集思广益。