1

データベースからデータを取得してオンラインで表示するWebページがありますが、何らかの理由で値が0.4に変更されている0.400000005960464場合は859.8に変更されてい859.799987792969ます。私はそれをデバッグし、データベースから値を正しく読み取っていることを確認したので、それは問題ではありませんが.aspx、値を台無しにしているのはページです。これは私がそのページに持っているものです。変更されているのは DataField コンポーネント 1 と 2 です。

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" 
AutoEventWireup="true" CodeFile="TestData.aspx.cs" 
Inherits="Inventory_TestData" Title="Module Test Data" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" 
Runat="Server">
<ul>
    <li>Item ID:
        <asp:TextBox ID="txtItem" runat="server" AutoPostBack="True" OnTextChanged="txtItem_TextChanged"></asp:TextBox></li></ul>
<li style="text-align: left"><span style="color: #009999">Test Data:</span><asp:ObjectDataSource
    ID="dsrcGetTestData" runat="server" SelectMethod="getTestData" TypeName="TestDataReader" DeleteMethod="deleteData">
    <SelectParameters>
        <asp:QueryStringParameter DefaultValue="0" Name="nItemID" QueryStringField="Item" Type="Int32" />
    </SelectParameters>
    <DeleteParameters>
        <asp:Parameter DefaultValue="" Name="TestID" Type="Int32" />
        <asp:Parameter DefaultValue="0" Name="TestType" Type="Object" />
    </DeleteParameters>
</asp:ObjectDataSource>
    <asp:GridView ID="gvTestItem" runat="server" AutoGenerateColumns="False" BackColor="White"
        BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4"
        DataSourceID="dsrcGetTestData" Font-Size="0.65em" ForeColor="Black" GridLines="Vertical" DataKeyNames="TestID">
        <FooterStyle BackColor="#CCCC99" />
        <Columns>
            <asp:CommandField ShowDeleteButton="True" />

             <asp:BoundField DataField="Component1" HeaderText="Component1" SortExpression="Component1"   />    
             <asp:BoundField DataField="Component2" HeaderText="Component2" SortExpression="Component2"/>    

        </Columns>
        <RowStyle BackColor="#F7F7DE" />
        <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right"  />
        <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
        <AlternatingRowStyle BackColor="White"  />
    </asp:GridView>

 </asp:Content>
4

2 に答える 2

0

あなたの問題は、おそらく数値の近似値として格納されているフロートによるものです。これを回避するには、固定精度の 10 進数型を使用するか、浮動小数点数を使用する前に固定精度の 10 進数型にキャストします。

一般に、浮動小数点数は正確な 2 進数表現を持ちません.... さまざまな時点で、さまざまな数の 2 進数を使用して数値を表すことができます。浮動小数点数をある表現から別の表現に変換すると、その数値の最下位桁がわずかに異なる場合があります。変換は通常、数値がある型から別の型にキャストされるときに発生します...文字列としてフォーマットされている場合、数値は期待される値を示さない場合があります。

これらの影響を最小限に抑えるには、利用可能な数値型間で最も近いものを使用する必要があります。たとえば、SQL Server を使用している場合、実数型の Transact-SQL 値を float 型の値に変換すると、正確な数値が変わる可能性があります。.NET Framework では、Single を Double に変換すると、予期しない結果が生じる場合もあります。どちらの場合でも、アプリケーション内のすべての値で同じ数値型を使用することをお勧めします。

MSDN の浮動小数点数に従って。

于 2014-01-09T20:31:03.783 に答える
0

列にフォーマット文字列を追加してみてください。たとえば、次のように

<asp:BoundField DataFormatString="{0:F3}" DataField="Component1" HeaderText="Component1" SortExpression="Component1" />    
<asp:BoundField DataFormatString="{0:F3}" DataField="Component2" HeaderText="Component2" SortExpression="Component2"/>

number を小数点以下 3 桁に制限します。

于 2014-01-09T20:31:07.543 に答える